记刷题时学到的一些技巧
-
需要输入未知个数时,可以用while(scanf("%d",&n) != EOF)来输入,EOF,为End Of File的缩写,通常在文本的最后存在此字符表示资料结束。
例:有两个整数a,b(2<=a<b),输出整数区间[a,b]内的所有素数。现在已知有多组数据,请依次处理。 输入样例:100 110 输出样例:101,103,107,109 输入格式: 有多组数据,每组2个整数a,b。 输出格式: 每组数据输出结果(素数间逗号分隔)后换行。 输入样例: 500 600 800 900 200 250 输出样例: 503,509,521,523,541,547,557,563,569,571,577,587,593,599 809,811,821,823,827,829,839,853,857,859,863,877,881,883,887 211,223,227,229,233,239,241
解:
#include<stdio.h>
int main()
{
int a,b,c=0,d=0;
while(scanf("%d %d",&a,&b)!=EOF)
{ d=0;
for(int i=a;i<=b;i++)
{c=0;
for(int n=2;n<i;n++)
{
if(i%n==0)
{
c++;
}
}
if(c==0)
{d++;
if(d!=1)
printf(",%d",i);
if(d==1)
printf("%d",i);
}
}printf("\n");
}
return 0;
}
2.整数翻转,比如将1234变成4321.
方法是不断地从其尾部取1位,放在一个初始值为0的新数的右侧即可。也就是如下语句可以将整数a反转成aa:
aa=0;
while(a>0){
aa=aa*10+a%10;
a=a/10;
}
例:让你求出两个数反转后相加的值。
输入格式:
有多组测试数据。每组包括两个数m和n,数据保证int范围,当m和n同时为0时表示输入结束。
输出格式:
输出每组测试数据反转后相加的结果,一个结果一行。
输入样例:
1234 1234
125 117
0 0
输出样例:
8642
1232
解:
#include<stdio.h>
int main()
{int a,b,c,d,e;
while(scanf("%d %d",&a,&b)!=EOF)
{c=0;
if(a==0&&b==0)
break;
while(a>0)
{
c=c*10+a%10;
a=a/10;
}
d=0;
while(b>0)
{
d=d*10+b%10;
b=b/10;
}
printf("%d\n",c+d);
}
return 0;
}
3.限制输出位数,以及读入位数,如%1d,表示只读入一位数字,或者只输出一位数字(当输出位数大于完整的数,将会在数的前面补空格)。这样可以方便地做某些题。
例:
输入一个正整数N(long long型范围内),输出N中的所有数字的和。
输入样例:
123456789
输出样例:
45
输入样例:
1005
输出样例:
6
解:
#include<stdio.h>
int main()
{
int a,b=0,c;
while(scanf("%1d",&a)!=EOF)
{b=a+b;
}
printf("%d",b);
}
4.当刷题时遇到格式错误时很烦,如果多个输出之间需要符号分割,并且要求最后一个数后不能有分隔符号,一般都是通过计数,当最后一个数输出时不输出分隔符,当输出的数够多时,计数也变得麻烦了一些,于是,我们可以先将第一无间隔符号输出,之后将间隔符号放在输出数前,可以避免末尾输出间隔符。
例:
有两个整数a,b(2<=a<b),输出整数区间[a,b]内的所有素数。
现在已知有多组数据,请依次处理。 输入样例:100 110 输出样例:101,103,107,109
输入格式:
有多组数据,每组2个整数a,b。
输出格式:
每组数据输出结果(素数间逗号分隔)后换行。
输入样例:
500 600
800 900
200 250
输出样例:
503,509,521,523,541,547,557,563,569,571,577,587,593,599
809,811,821,823,827,829,839,853,857,859,863,877,881,883,887
211,223,227,229,233,239,241
解:
#include<stdio.h>
int main()
{
int a,b,c=0,d=0;
while(scanf("%d %d",&a,&b)!=EOF)
{ d=0;
for(int i=a;i<=b;i++)
{c=0;
for(int n=2;n<i;n++)
{
if(i%n==0)
{
c++;
}
}
if(c==0)
{d++;
if(d!=1)
printf(",%d",i);//将逗号放在前面,末尾就不会出现
if(d==1)
printf("%d",i);//第一位输出,无需计数
}
}printf("\n");
}
return 0;
}