蓝桥杯刷题C-卡片、递增序列、质数(第七天12.20)

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 
#include 

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 
#include 
#include

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 
#include 

int main(int argc, char *argv[])
{
  // 请在此输入您的代码
  int i,j,sum=1,flat;
  for(i=3;;i++)
  {
    flat=0;
    for(j=2;j

你可能感兴趣的:(蓝桥c,蓝桥杯,c语言,算法)