题目描述
读取一系列的整数X,对于每个X,输出一个1,2,…,X的序列。
输入格式
输入文件中包含若干个整数,其中最后一个为0,其他的均为正整数。
每个整数占一行。
对于输入的正整数,按题目要求作输出处理。
对于最后一行的整数0,不作任何处理。
输出格式
对于每个输入的正整数X,输出一个从1到X的递增序列,每个序列占一行。
数据范围
X≤100
输入样例:
5
10
3
0
输出样例:
1 2 3 4 5
1 2 3 4 5 6 7 8 9 10
1 2 3
算法1
下边是一个中规中矩的写法
#include<iostream>
using namespace std;
int main()
{
int x;
while(true)
{
cin>>x;
if(x==0)
return 0;
for(int i=1;i<=x;i++)
cout<<i<<" ";
cout<<endl;
}
return 0;
}
算法2
#include<iostream>
using namespace std;
int main()
{
int x;
while(cin>>x&&x)
{
for(int i=1;i<=x;++i)
cout<<i<<" ";
cout<<endl;
}
return 0;
}
注意:其实cin函数是有返回值的,当读到一个数值时返回1,当读到文件结束符时返回0或者false。(scanf函数也一样)
这样的话,”while(cin>>x&&x)”是先读入一个数,然后判断这个数是否为0。
算法3
逗号表达式
#include<iostream>
using namespace std;
int main()
{
int x;
while(cin>>x,x)
{
for(int i=1;i<=x;++i)
cout<<i<<" ";
cout<<endl;
}
return 0;
}
练习1:AcWing720. 连续整数相加
题目描述
读入两个整数值A和N,计算从A开始的N个连续整数的和。
注意,如果读入的N为0或负数,则继续读取数字直至读入N值为正整数为止。
输入格式
共一行,包含整数A和若干个整数N。
输出格式
一个整数,表示从A开始的N个连续整数的和。
数据范围
1≤A≤100,
−100≤N≤100
输入样例1:
3 2
输出样例1:
7
输入样例2:
3 -1 0 -2 2
输出样例2:
7
#include<iostream>
using namespace std;
int main()
{
int a,n,num;
cin>>a;
while(cin>>n,n<=0){} //while(cin>>n,n<=0);也可
cout<<(a+a+n-1)*n/2;
return 0;
}
练习2: AcWing722. 数字序列和它的和
输入若干个整数对M,N,对于每个数对,输出以这两个数为最大值和最小值的公差为1的等差数列。
注意,当输入整数对中,任意一个数为0或负整数时,立即停止输入,且该组数对无需作任何处理。
输入格式
输入共若干行,每行包含两个整数。
最后一行的两个整数中,至少有一个是非正整数。
输出格式
对于每组需作处理的数对,输出一个结果,每个结果占一行。
结果包含从最小值到最大值的数字序列以及数字序列各数字之和。
具体格式请参照输出样例。
数据范围
M,N≤100
输入样例:
2 5
6 3
5 0
输出样例:
2 3 4 5 Sum=14
3 4 5 6 Sum=18
算法
#include<iostream>
using namespace std;
int main()
{
int m,n;
while(cin>>m>>n,m>0&&n>0){
if(m>n){
int l=m;m=n;n=l;
}
int num=0;
for(int i=m;i<=n;++i){
cout<<i<<" ";
num+=i;
}
cout<<"Sum="<<num<<endl;
}
return 0;
}
高斯定理着实没想到,厉害厉害
while(cin >> x ; n<= 0) 后面的不等式怎末理解??
你弄错了,是while(cin >> x ,n<= 0) 逗号表达式,只读最后一个表达式。
cin>>x的目的只是读入值,读入值成功返回true,失败返回false,但题目里并不会给出失败的情况。
所以,n<=0就是单纯的判断了。
#收藏比点赞多
厉害
tql
TQL
棒棒哒
好细节
牛