时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 256M,其他语言512M
输入描述: 输入包括两个正整数a,b(1 <= a, b <= 10^9),输入数据包括多组。
输出描述: 输出a+b的结果
输入例子1:
1 5
10 20
输出例子1:
6
30
测试代码:
#include
int main(){
int a,b;
//写法一:
while(scanf("%d %d",&a,&b)==2) //scanf函数返回成功读入的数据项数
//写法二:
//while(scanf("%d %d\n",&a,&b)!=EOF)
{
printf("%d\n",a+b);
}
return 0;
}
注:scanf函数返回成功读入的数据项数,即每次读入的个数
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 256M,其他语言512M
输入描述: 输入第一行包括一个数据组数t(1 <= t <= 100)
接下来每行包括两个正整数a,b(1 <= a, b <= 10^9)
输出描述: 输出a+b的结果
输入例子1:
2
1 5
10 20
输出例子1:
6
30
测试代码:
//方法一:利用t写for循环
#include
int main(){
int t,a,b;
scanf("%d",&t);
for(int i=0;i<t;i++){
scanf("%d %d",&a,&b);
printf("%d\n",a+b);
}
return 0;
}
//方法二:直接接收后面的数并输出结果
#include
int main(){
int t,a,b;
scanf("%d",&t);
//while(scanf("%d %d",&a,&b)==2)
while(scanf("%d %d\n",&a,&b)!=EOF)
{
printf("%d\n",a+b);
}
return 0;
}
//方法三:利用t写while循环
# include
int main()
{
int t,a,b;
scanf("%d",&t);
while (t)
{
scanf("%d %d",&a,&b);
printf("%d \n",a+b);
t--;
}
return 0;
}
//写法二:不用返回0
#include
int main(void)
{
int t, a, b;
scanf("%d", &t);
while(t)
{
scanf("%d %d", &a, &b);
printf("%d\n", a + b);
t--;
}
}
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 256M,其他语言512M
输入描述: 输入包括两个正整数a,b(1 <= a, b <= 10^9),输入数据有多组, 如果输入为0 0则结束输入
输出描述: 输出a+b的结果
输入例子1:
1 5
10 20
0 0
输出例子1:
6
30
测试代码:
//方法一:在循环条件中加限定
#include
int main(void){
int a,b;
while(scanf("%d %d",&a,&b)!=EOF && a!=0 && b!=0)
//while(scanf("%d %d",&a,&b)==2 && a!=0 && b!=0)
{
printf("%d\n",a+b);
}
}
//方法二:在循环中判断退出
#include
int main(){
int a,b;
while(scanf("%d%d\n",&a,&b)!=EOF)
{
if(a==0&&b==0) break;
printf("%d\n",a+b);
}
}
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 256M,其他语言512M
输入描述: 输入数据包括多组。
每组数据一行,每行的第一个整数为整数的个数n(1 <= n <= 100), n为0的时候结束输入。
接下来n个正整数,即需要求和的每个正整数。
输出描述: 每组数据输出求和的结果
输入例子1:
4 1 2 3 4
5 1 2 3 4 5
0
输出例子1:
10
15
测试代码:
//方法一:自己写的,直接修改while循环的条件
#include
int main(){
int n,res=0,sum=0;
scanf("%d",&n); //首先先取得一个n值
//while(n!=0)
while(n)
{
sum=0;
for(int i=0;i<n;i++){
scanf("%d",&res);
sum+=res;
}
printf("%d\n",sum);
scanf("%d",&n); //循环完成后取下一个n值进行判断
}
}
//方法二: 在循环中判断n==0进行退出
#include
int main(){
int n, num, sum=0;
while(scanf("%d", &n)!=EOF){
sum=0;
if(n==0)
break;
for(int i=0;i<n;i++)
{
scanf("%d", &num);
sum+=num;
}
printf("%d\n", sum);
}
return 0;
}
//方法三: 利用while(scanf("%d",&n),n)进行判断
#include
int main()
{
int n,a,sum;
while(scanf("%d",&n),n){
if(n == 0)
{
break;
}
sum=0;
for(int i=0;i<n;i++)
{
scanf("%d",&a);
sum += a;
}
printf("%d\n",sum);
}
return 0;
}
注:while(scanf("%d",&n),n)其实相当于while(n),只是因为要输入所以写成了while(scanf("%d",&n),n)这样而已
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32M,其他语言64M
输入描述: 输入的第一行包括一个正整数t(1 <= t <= 100), 表示数据组数。
接下来t行, 每行一组数据。
每行的第一个整数为整数的个数n(1 <= n <= 100)。
接下来n个正整数, 即需要求和的每个正整数。
输出描述: 每组数据输出求和的结果
输入例子1:
2
4 1 2 3 4
5 1 2 3 4 5
输出例子1:
10
15
测试代码:
//方法一:
#include
int main(void){
int t,n,temp,sum;
scanf("%d",&t);
while(t){
scanf("%d",&n);
sum=0;
for(int i=0;i<n;i++){
scanf("%d",&temp);
sum+=temp;
}
printf("%d\n",sum);
t--;
}
}
//方法二:结合n和t作为while的条件判断
#include
int main(void)
{
int t, n, a,sum;
scanf("%d", &t);
while(scanf("%d", &n), n && t)
{
if(n == 0) break;
sum = 0;
for(int i= 0; i < n; i++)
{
scanf("%d", &a);
sum += a;
}
printf("%d\n", sum);
t--;
}
return 0;
}
//方法三:两个for循环
#include "stdio.h"
int main(){
int n;
scanf("%d", &n);
int b;
for(int i = 0; i < n; i++){
scanf("%d", &b);
int sum = 0;
for(int j = 0; j < b; j++){
int num = 0;
scanf("%d", &num);
sum += num;
}
printf("%d\n", sum);
}
return 0;
}
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 256M,其他语言512M
输入描述: 输入数据有多组, 每行表示一组输入数据。
每行的第一个整数为整数的个数n(1 <= n <= 100)。
接下来n个正整数, 即需要求和的每个正整数。
输出描述: 每组数据输出求和的结果
输入例子1:
4 1 2 3 4
5 1 2 3 4 5
输出例子1:
10
15
测试代码:
//方法一:.
#include
int main(void){
int n,temp,sum;
while(scanf("%d",&n)!=EOF)
// while (EOF!=scanf("%d", &n))
{
sum=0;
for(int i=0;i<n;i++){
scanf("%d",&temp);
sum+=temp;
}
printf("%d\n",sum);
}
}
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 256M,其他语言512M
输入描述: 输入数据有多组, 每行表示一组输入数据。
每行不定有n个整数,空格隔开。(1 <= n <= 100)。
输出描述: 每组数据输出求和的结果
输入例子1:
1 2 3
4 5
0 0 0 0 0
输出例子1:
6
9
0
测试代码:
//写法一:
#include
int main(void){
int temp,sum=0;
while(scanf("%d",&temp)!=EOF){
sum+=temp;
if(getchar()=='\n'){ //到一行结尾处输出并重置sum
printf("%d\n",sum);
sum=0;
}
}
}
//代码二:
#include
int main(){
int n,sum=0;
char c;
while(scanf("%d",&n)!=EOF){
c=getchar(); //将getchar的值放入c中再后续进行判断
sum+=n;
if(c=='\n'){
printf("%d\n",sum);
sum=0;
}
}
return 0 ;
}
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 256M,其他语言512M
输入描述: 输入有两行,第一行n
第二行是n个空格隔开的字符串
输出描述: 输出一行排序后的字符串,空格隔开,无结尾空格
输入例子1:
5
c d a bb e
输出例子1:
a bb c d e
测试代码:
//方法一:
#include
#include
#include
int main(void){
int n;
scanf("%d",&n);
char str[n][100];
for(int i=0;i<n;i++){
scanf("%s",&str[i]);
}
qsort(str,n,sizeof(str[0]),strcmp); //排序
for(int i=0;i<n;i++){
printf("%s ",str[i]);
}
}
//方法二:自己编qsort的比较函数
#include
#define LENGTH 1000
int compar(const void *p1, const void *p2){
return strcmp((char *)p1, (char *)p2);
}
int main(int argc, char **argv){
int len = 0;
scanf("%d", &len);
char arr[len][LENGTH];
for(int i=0; i<len; i++)
{
scanf("%s", arr[i]);
}
qsort(arr, len, sizeof(arr[0]), compar);
for(int i=0; i<len; i++)
{
printf("%s ", arr[i]);
}
return 0;
}
//写法三:
#include
#include
#include
int Cmp(const void* a, const void* b) {
char* newA = (char*)a;
char* newB = (char*)b;
return *newA - *newB;
}
int main()
{
int n;
scanf("%d", &n);
char str[n][100];
for (int i = 0; i < n; i++) {
scanf("%s", str[i]);
}
qsort(str, n, sizeof(str[0]), Cmp);
for (int i = 0; i < n; i++) {
printf("%s ", str[i]); //注意此处的空格
}
return 0;
}
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 256M,其他语言512M
输入描述: 多个测试用例,每个测试用例一行。
每行通过空格隔开,有n个字符,n<100
输出描述: 对于每组测试用例,输出一行排序过的字符串,每个字符串通过空格隔开
输入例子1:
a c bb
f dddd
nowcoder
输出例子1:
a bb c
dddd f
nowcoder
测试代码:
//写法一:
#include
#include
#include
int main(void){
char str[100][100];
int i=0;
while(scanf("%s",str[i])!=EOF){ //此处数组可加可不加&符,因其本身就是地址
i++;
if(getchar()=='\n'){
qsort(str,i,sizeof(str[0]),strcmp);
for(int x=0;x<i;x++){
printf("%s ",str[x]); //注意此处的空格
}
printf("\n"); //每行输出后还需要换行符
i=0;
}
}
}
//写法二: 自己编cmp函数
#include
#include
#include
int compare(const void* a, const void* b){
return strcmp((char*)a, (char*)b);
//return *(char*)a- *(char*)b;
}
//int compare(const void *a,const void *b){
// char * _a=(char*)a;
// char * _b=(char*)b;
// return strcmp(_a,_b);
//}
int main(){
int n = 0, i;
char str[100][100];
while (scanf("%s", &str[n]) != EOF){
n++;
if (getchar() == '\n'){
qsort(str, n, sizeof(str[0]), compare);
for (i = 0; i < n - 1; i++){
printf("%s ", str[i]);
}
printf("%s\n", str[n - 1]);
n = 0;
}
}
return 0;
}
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 256M,其他语言512M
输入描述: 多个测试用例,每个测试用例一行。
每行通过,隔开,有n个字符,n<100
输出描述: 对于每组用例输出一行排序后的字符串,用’,'隔开,无结尾空格
输入例子1:
a,c,bb
f,dddd
nowcoder
输出例子1:
a,bb,c
dddd,f
nowcoder
测试代码:
//方法一:
#include
#include
#include
int main(void){
char str[100][100];
int i=0;int x;
while(scanf("%[^,\n]",str[i++])!=EOF){
if(getchar()=='\n'){
qsort(str,i,sizeof(str[0]),strcmp);
for(x=0;x<i-1;x++){
printf("%s,",str[x]); //注意此处的,号
}
printf("%s\n",str[x]);
i=0;
}
}
}
//方法二:输出不同的写法
#include
#include
#include
int main(){
int n, j;
char str[100][100];
n = 0;
while (scanf("%[^,\n]", str[n]) != EOF){
n++;
if (getchar() == '\n'){
qsort(str, n, sizeof(str[0]), strcmp);
for (j = 0; j < n - 1; j++){
printf ("%s,", str[j]);
}
printf ("%s\n", str[n - 1]);
n = 0;
}
}
return 0;
}
//方法三:
注:^表示"非",[ ^\n ]表示读入换行字符就结束读入。这个是scanf的正则用法,我们都知道scanf不能接收空格符,一接受到空格就结束读入,所以不能像gets()等函数一样接受一行字符串,但是使用%[ ^\n ]就可以读取一行,直到碰到’\n’才结束读入。
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 256M,其他语言512M每年前几场在线笔试编程题的时候,总有同学询问为什么我本地测试通过,自测也通过,提交代码系统却返回通过率0。
这不是系统的错,可能是因为
1.你对题目理解错了,你的代码只过了样例或你自己的数据
2.你的代码逻辑有问题,你的代码只过了样例或你自己的数据 总之就是你的代码只是过了样例和自测数据,后台的测试数据你根本不可见,要多自己思考。
输入描述: 输入有多组测试用例,每组空格隔开两个整数
输出描述: 对于每组数据输出一行两个整数的和
输入例子1:
1 1
输出例子1:
2
测试代码:
#include
int main(void){
long long int a,b;
while(scanf("%lld %lld ",&a,&b)!=EOF){
printf("%lld\n",a+b);
}
}
注:这个坑真是有被秀到,当以为和前面的题一样,或者以为只要把空格搞好就完事的时候,才发现没有完全通过,结果发现!——居然是因为数据类型的问题。
1、EOF 在C语言中,或更精确地说成C标准函数库中表示文件结束符(end of file),在while循环中以EOF作为文件结束标志。所以 while(scanf("%d",&n)!=EOF)可以用来输入多组数据。
2、有些题目又有要求, 当输入n为0时则不进行处理, 可以这样写while(scanf("%d",&n)&&n!=0),也可以直接写while(scanf("%d",&n)&&n),进而变成while(scanf("%d",&n),n)。
3、while(scanf("%d",&n),n)在while括号里是一个逗号表达式。
1、while(scanf("%d",&n)&&n!=0)等价于while(scanf("%d",&n)&&n)等价于while(scanf("%d",&n),n)。
2、while(scanf("%d",&n),n)语句就是先输入一个整数赋值给n(表达式1),然后while括号里的值是n(表达式2),若n为真则进行while循环,n为0时则不做处理。
3、scanf("%[ ^,\n ]"是遇到逗号和\n结束。
4、scanf函数返回的是成功读入的数据项数,即每次读入的个数。
OJ在线编程常见输入输出练习