1、卡片:这道题的思路不难,但是我在一开始不知道为什么总是只循环一次就出来了。这道题可以先设个数组,长度为10分别代表每张牌的数字,再让它们各等于2021,关键就是把每个数拆分开来,然后哪张牌再减减,减到随便一张牌等于零的时候则退出循环,这个时候输出的是当前这个数再减一。那个判断我写“a[0]==0||a[1]==0||a[2]==0||a[3]==0||a[4]==0||a[5]==0||a[6]==0||a[7]==0||a[8]==0||a[9]==0”却不行,奇怪了
代码如下:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int a[10],i,n,k;
for(i=0;i<10;i++)
a[i]=2021;
for(n=1;;n++)
{
k=n;
while(k)
{
if(a[k%10]==0)
{
printf("%d",n-1);
return 0;
}
a[k%10]--;
k/=10;
}
}
// 请在此输入您的代码
}
2、递增序列:这道题一开始竟然没太看得懂,后面想明白了。就是跟同一列后面的比、和跟同一列的下面的比,右下角的比,最关键的是左下角和右上角的只要两个元素不相等,总数就能加一。因为这是到填空题,不能从键盘输入,所以我知道答案,就直接输出了。
代码如下:
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
int main(int argc, char *argv[])
{
// 请在此输入您的代码
char a[30][50];
int j,l,i,m,n;
for(i=0;i<30;i++)
gets(a[i]);
int sum=0;
for(i=0;i<30;i++)
for(j=0;j<50;j++){
for(l=j;l<50;l++)//横向
if(a[i][j] < a[i][l])
sum++;
for(l=i;l<30;l++)//纵向
if(a[i][j] < a[l][j])
sum++;
for(m=i,n=j;m<30 && n<50;m+=1,n+=1)//右下,斜向
if(a[i][j] < a[m][n])
sum++;
for(m=i,n=j;m>=0 && n<50;m-=1,n+=1)//右上,斜向
if(a[i][j] !=a[m][n])
sum++;
}
// printf("%d",sum);
printf("52800");
return 0;
}
3、质数:蛮简单的一道题,就是判断是不是质数,是质数sum++,当到了2019,就结束。
代码如下:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
// 请在此输入您的代码
int i,j,sum=1,flat;
for(i=3;;i++)
{
flat=0;
for(j=2;j<i;j++)
{
if(i%j==0)
{
flat=1;
break;
}
}
if(flat==0)
sum++;
if(sum==2019)
{
printf("%d",i);
return 0;
}
}
}