题目要求
其中,最后一组数据输出后不换行
本人代码
#include<iostream>
using namespace std;
int main()
{
int x,y,n,s=0;
while(cin>>n)
{
for(x=0;x<=99;x++)
{
for(y=0;y<=99;y++)
{
if((x*x+y*y)==n&&x<=y)
{
cout<<x<<" "<<y<<endl;
s=1;
}
}
}
if(s!=1)
cout<<"No Solution";
}
return 0;
}
从本人实现结果来看,最后一组数据是有换行的,请问如何去掉呢
#include<iostream>
using namespace std;
int main()
{
int x,y,n,s=0;
while(cin>>n)
{
for(x=0;x<=99;x++)
{
for(y=0;y<=99;y++)
{
if((x*x+y*y)==n&&x<=y)
{
if(s!=0)
cout << endl;
cout<<x<<" "<<y;
s=1;
}
}
}
if(s!=1)
cout<<"No Solution";
}
return 0;
}
c++输出用的是cout对象:
cout<<表达式1<<表达式2<<……<<表达式n;
在定义流对象时,系统会在内存中开辟一段缓冲区,用来暂存输入输出流的数据。在执行cout语句时,先把插入的数据顺序存放在输出缓冲区中,直到输出缓冲区满或遇到cout语句中的endl(或'\n',ends,flush)为止,此时将缓冲区中已有的数据一起输出,并清空缓冲区。
endl的作用有两个:一个是结束输出流并换行,一个是清空缓存区。
不换行的话可以用ends代替,会直接跟在末尾。
修改了一下,最后一行不会换行了
#include<iostream>
using namespace std;
int main()
{
int x,y,n,s=0;
while(cin>>n)
{
for(x=0;x<=99;x++)
{
for(y=0;y<=99;y++)
{
if((x*x+y*y)==n&&x<=y)
{
s++;
if(s==1){
cout<<x<<" "<<y;
}
else{
cout<<endl;
cout<<x<<" "<<y;
}
}
}
}
if(s==0)
cout<<"No Solution";
}
return 0;
}
原因在这cout<<x<<" "<<y<<endl;
你每获得一组xy值就直接输出了,而且endl就是换行了
你可以这样
获得的xy值先存起来,然后在计算完所有的值之后再输出
int main()
{
int x[100];
int y[100];
int n,s=0;
int k = 0;
cin >> n;
if (n < 0)
cout << "n must >0";
for (int i = 0; i < sqrt(n ); i++)
{
for (int j = i; j < sqrt(n ); j++)
{
if ((i*i + j*j) == n)
{
x[k] = i;
y[k++] = j;
s++;
}
}
}
if (!s)
cout << "no solution";
for (int i = 0; i < k; i++)
{
if (i == k - 1)
{
cout << x[i] <<" "<< y[i];
break;
}
cout << x[i] << " " << y[i] << endl;
}
return 0;
}