蓝桥杯刷题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 <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;
    }
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值