A题
太容易了?!答案是肯定的!我专门为acm初学者设计了这个问题。
你一定发现有些问题与这个问题具有相同的标题,是的,所有这些问题都是为同一目的而设计的。
输入
输入将由一系列整数 a 和 b 对组成,以空格分隔,每行一对整数。
输出
对于每对输入整数 a 和 b,应在一行中输出 a 和 b 的总和,并在输入中的每一行输出一行。
Sample Input
1 5 10 20
Sample Output
6 30
#include<stdio.h>
int main()
{
int a;
int b;
while(~scanf("%d%d",&a,&b))
{
printf("%d\n",a+b);
}
return 0;
}
B题
输入
输入在第一行中包含一个整数 N,然后 N 行紧随其后。每行由一对整数 a 和 b 组成,用空格分隔,每行一对整数。
输出
对于每对输入整数 a 和 b,应在一行中输出 a 和 b 的总和,并在输入中的每一行输出一行。
Sample Input
2 1 5 10 20
Sample Output
6 30
#include<stdio.h>
int main()
{
int a,b,i,N;
scanf("%d",&N);
for(i=0;i<N;i++)
{
scanf("%d %d",&a,&b);
printf("%d\n",a+b);
}
return 0;
}
C题
输入
输入包含多个测试用例。每个测试用例都包含一对整数 a 和 b,每行一对整数。包含 0 0 的测试用例将终止输入,并且不会处理此测试用例。
输出
对于每对输入整数 a 和 b,应在一行中输出 a 和 b 的总和,并在输入中的每一行输出一行。
Sample Input
1 5 10 20 0 0
Sample Output
6
#include<stdio.h>
int main()
{
int a,b;
while((scanf("%d %d",&a,&b)!=EOF)&&(a||b))//注意格式
{
printf("%d\n",a+b);
}
}
D题
输入
输入包含多个测试用例。每个测试用例都包含一个整数 N,然后 N 个整数跟在同一行中。以 0 开头的测试用例将终止输入,并且不会处理此测试用例。
输出
对于每组输入整数,应将其总和输出为一行,输入中的每一行输出一行。
Sample Input
4 1 2 3 4 5 1 2 3 4 5 0
Sample Output
10 15
#include<stdio.h>
int main()
{
int a,i,c;
int b=0;
int N;
while(scanf("%d",&N)!=EOF&&N!=0)
{
for(i=0;i<N;i++)
{
scanf("%d",&a);
b+=a;
}
c=b;//将b赋值给c后输出c
b=0;//再将b清零,以便下一组数据处理时b初始值为0
printf("%d\n",c);
}
return 0;
}
E题
输入
输入在第一行中包含一个整数 N,然后 N 行紧随其后。每行以整数 M 开头,然后 M 个整数跟在同一行中。
输出
对于每组输入整数,应将其总和输出为一行,输入中的每一行输出一行。
Sample Input
2 4 1 2 3 4 5 1 2 3 4 5
Sample Output
10 15
#include<stdio.h>
int main()
{
int N,M;
int a,c,d,j,i;
scanf("%d",&N);
for(j=0;j<N;j++)
{
while(scanf("%d",&M)!=EOF)
{
int b=0;
for(i=0;i<M;i++)
{
scanf("%d",&a);
b+=a;
}
c=b;
b=0;
printf("%d\n",c);
}
}
return 0;
}
F题
输入
输入包含多个测试用例,一个用例包含一行。每种情况都以整数 N 开头,然后 N 个整数跟在同一行中。
输出
对于每个测试用例,您应该在一行中输出 N 个整数的总和,并在输入中的每一行输出一行。
Sample Input
4 1 2 3 4 5 1 2 3 4 5
Sample Output
10 15
#include<stdio.h>
int main()
{
int a,b;
int c=0;
int i;
while(scanf("%d",&a)!=EOF)
{
for(i=0;i<a;i++)
{
scanf("%d",&b);
c+=b;
}
printf("%d\n",c);
c=0;//将结果清零的另一种写法,先输出,再清零
}
}
G题
输入
输入将由一系列整数 a 和 b 对组成,以空格分隔,每行一对整数。
输出
对于每对输入整数 a 和 b,应输出 a 和 b 的总和,后跟一个空行。
Sample Input
1 5 10 20
Sample Output
6 30
#include<stdio.h>
int main()
{
int a,b;
while(scanf("%d %d",&a,&b)!=EOF)
{
printf("%d\n",a+b);
printf("\n");
}
return 0;
}
H题
输入
输入在第一行中包含一个整数 N,然后 N 行紧随其后。每行以整数 M 开头,然后 M 个整数跟在同一行中。
输出
对于每组输入整数,应将其总和输出为一行,并且必须注意输出之间有一个空行。
Sample Input
3 4 1 2 3 4 5 1 2 3 4 5 3 1 2 3
Sample Output
10 15 6
#include<stdio.h>
int main()
{
int N,M,i,x,sum=0;
scanf("%d",&N);//N行紧随其后
for(i=1;i<=N;i++)
{
while(scanf("%d",&M))//M个数跟在同一行中
{
for(i=1;i<=M;i++)
{
scanf("%d",&x);
sum+=x;
}
printf("%d\n",sum);
printf("\n");
sum=0;
}
}
return 0;
}
I题——判断三角形
输入三个整数a,b,c,分别表示三条线段的长度,请编程判断:这三根线段能否组成三角形,如果可以则输出yes,否则输出no。
注:三角形的三条边需要满足最长边的长度小于两条短边的长度。
Input
输入一行三个整数a,b,c,代表三根线段的长度;
Output
输出 yes 或者 no,代表能否组成三角形;
Sample Input
1 2 3
Sample Output
no
#include<stdio.h>
int main()
{
int a,b,c;
int i;
while(scanf("%d %d %d",&a,&b,&c)!=EOF)//输入时有无空格不影响
{
if(a+b>c&&a+c>b&&b+c>a) //注意格式
printf("yes");
else
printf("no");
}
}
J题——水仙花数
春天是鲜花的季节,水仙花就是其中最迷人的代表,数学上有个水仙花数,他是这样定义的:
“水仙花数”是指一个三位数,它的各位数字的立方和等于其本身,比如:153=1^3+5^3+3^3。
现在要求输出所有在m和n范围内的水仙花数。
Input
输入数据有多组,每组占一行,包括两个整数m和n(100<=m<=n<=999)。
Output
对于每个测试实例,要求输出所有在给定范围内的水仙花数,就是说,输出的水仙花数必须大于等于m,并且小于等于n,如果有多个,则要求从小到大排列在一行内输出,之间用一个空格隔开;
如果给定的范围内不存在水仙花数,则输出no;
每个测试实例的输出占一行。
Sample Input
100 120 300 380
Sample Output
no 370 371
#include<stdio.h>
int main()
{
int n,m,i;//范围[m,n]
int a,b,c;//个百十位
int flag=0;
while(scanf("%d%d",&m,&n)!=EOF)
{
for(i=m;i<=n;i++)
{
a=i/100;//百位
b=i%10;//个位
c=(i%100)/10;//十位
if(i==a*a*a+b*b*b+c*c*c)
{
if(flag==0)
{
printf("%d",i);//第一个数输出时前面不用加空格
flag=1;//输出第一个数后,将flag赋值为1,则后面的数输出时,前面都要加空格
}
else
printf(" %d",i);//注意有空格,控制格式
}
}
}//遍历[m,n]后
/*范围内没有水仙花数,即flag==0,输出no*/
if(flag==0)
printf("no\n");
/*范围内有水仙花数,即flag==1,则换行,将falg重新赋值为0,进行下一组数据处理*/
if(flag==1)
{
printf("\n");
flag=0;//注意,flag一定要重新赋值为0后,才能进行下一组数据处理
}
return 0;
}
K题——数列有序
有n(n<=100)个整数,已经按照从小到大顺序排列好,现在另外给一个整数x,请将该数插入到序列中,并使新的序列仍然有序。
Input
输入数据包含多个测试实例,每组数据由两行组成,第一行是n和m,第二行是已经有序的n个数的数列。n和m同时为0标示输入数据的结束,本行不做处理。
Output
对于每个测试实例,输出插入新的元素后的数列。
Sample Input
3 3 1 2 4 0 0
Sample Output
1 2 3 4
#include <stdio.h>
int main()
{
int i,j,k;
int n,m;
int temp;
int num[100];//定义一个有100个元素的数组num
while(scanf("%d %d", &n, &m)!=EOF, n!=0 || m!=0)//输入m和n,当m和n同时为0时 程序结束
{
for(k=0; k<n; k++)
{
scanf("%d", &num[k]);//初始化数组,将数组中的元素放入数组num[k]中
}
num[k++]=m;//将插入的数m放入数组中,但数组中元素要加一,所以要k++
for(i=1; i<k; i++)
{
for(j=i+1;j<k;j++)//当下标j=i+1,即j比i大1时
{
if(num[i] >num[j])//但数值上却是num[i]比num[j]大
{
temp= num[i]; //交换num[i]和num[j]的值 ,让下标的大小顺序和数值的大小顺序一致
num[i]= num[j];
num[j]= temp;
}
}
}
for(i=0; i<k; i++)
{
printf("%d", num[i]);//遍历数组num[i],然后输出
if(i<k-1)
{
printf(" ");//如果在遍历数组的过程中,没有遍历到最后一个数时,每次遍历一个数,在后面输出一个空格
}
}
printf("\n");//while中全部执行完了,回车换行,进行下一组数据处理
}
return 0;
}
L题——绝对值排序
输入n(n<=100)个整数,按照绝对值从大到小排序后输出。题目保证对于每一个测试实例,所有的数的绝对值都不相等。
Input
输入数据有多组,每组占一行,每行的第一个数字为n,接着是n个整数,n=0表示输入数据的结束,不做处理。
Output
对于每个测试实例,输出排序后的结果,两个数之间用一个空格隔开。每个测试实例占一行。
Sample Input
3 3 -4 2 4 0 1 2 -3 0
Sample Output
-4 3 2 -3 2 1 0
#include<stdio.h>
#include<math.h>
int main()
{
int n;//思路:数组大小—定义数组—初始化数组—数组参与运算—遍历数组输出
int i;
int j;
int temp;
int a[100];//定义一个有100个数的数组a[100]
while(scanf("%d",&n)!=EOF&&n)//输入n,当n的值为0时,程序停止
{
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);//初始化数组a[i]
}
for(i=0;i<n-1;i++)//在数组a[]中
{
for(j=i+1;j<n;j++)//当j>i,且j比i大1时
{
if(fabs(a[i])<fabs(a[j]))//如果a[i]的绝对值<a[j]的绝对值
{
temp=a[i];//则交换a[i]和a[j]的值 ,使a[]的下标大小顺序和a[]的绝对值的大小顺序一致
a[i]=a[j];
a[j]=temp;
}
}
}
for(i=0;i<n-1;i++)//遍历数组a[i]并输出,为什么是i<n-1,而不是i<n?
{
printf("%d",a[i]);//遍历数组a[i]
if(i<n)
{
printf(" ");//如果在遍历数组的过程中,没有遍历到最后一个数,每次遍历一个数,在后面输出空格
}
}
printf("%d\n",a[i]);
//while中执行完了,回车,进入下一次数据处理 (每个测试实例占一行的写法:加\n)
}
return 0;
}
M题——C语言合法标识符
输入一个字符串,判断其是否是C的合法标识符。
Input
输入数据包含多个测试实例,数据的第一行是一个整数n,表示测试实例的个数,然后是n行输入数据,每行是一个长度不超过50的字符串。
Output
对于每组输入数据,输出一行。如果输入数据是C的合法标识符,则输出"yes",否则,输出“no”。
Sample Input
3 12ajf fi8x_a ff ai_2
Sample Output
no yes no
#include <stdio.h>
#include<string.h>//调用字符型函数
int main()
{
int n;
char a[100];//定义一个有100个字符的数组a
int flat = 1;//定义一个开关变量
scanf("%d",&n);//输入字符串个数
getchar();//吸收回车换行
while (n--)//字符串个数为n,要逐个排查,循环n次
{
flat = 1;//设置开关变量
gets(a);//读取字符串到数组a中
int l = strlen(a);//将字符串长度赋值给l
if (!((a[0] >= 'a' && a[0] <= 'z') || (a[0] >= 'A' && a[0] <= 'Z') || a[0] == '_'))//首字符排查
{
flat = 0;//开关变量为假
printf("no\n");//条件符合
}
else
{
int i;
for (i = 1; i < l; i++)//除首字符外剩下的字符排查,所以i要从1开始,l为字符串长度
{
if (!((a[i] >= '0' && a[i] <= '9') || (a[i] >= 'a' && a[i] <= 'z') || (a[i] >= 'A' && a[i] <= 'Z') || (a[i] == '_')))
{
flat = 0;//开关变量 为假
printf("no\n");//条件不符合
break;//记得break一下,停止循环
}
}
}
if (flat==1)//开关变量 为真
printf("yes\n");
}
return 0;
}