记刷题时学到的一些技巧

记刷题时学到的一些技巧

  1. 需要输入未知个数时,可以用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;
}
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值