蓝桥杯刷题C-跑步锻炼、等差数列、组队(第四天12.17)

1、跑步锻炼:这道题一开始还以为都是一年以内的,就觉得很简单,直接手算还简单些,后面一直不对,我才发现是2000年到2020年。这道题就要先判断哪些是闰年,再确定每个月份的天数,可以用数组,这里可以用一个13的数组,这样的月份就是1-12月的了,0月就是0天。每过一天则公里数增加一公里,如果碰到一月或者周一则再增加一天。每周可以用一个变量表示增加到了8就变成1,这样的话就可以用来判断哪些是周一。还有,一定要注意花括号!!!找了我好久的错误!!!!!

代码如下:

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
  // 请在此输入您的代码
    int months[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
    int year,month,day;
    int ans=6;//一月一号是周六
    int sum=0;//公里数
    //判断闰年,确定二月的天数
    for(year=2000;year<=2020;year++){
        if((year%4==0&&year%100!=0)||year%400==0){
            months[2]=29;
        }else{
            months[2]=28;
        }
    for(month=1;month<=12;month++)//月份
    {
       for(day=1;day<=months[month];day++)
       {
         sum++;
         if(ans==8)
         {
           ans=1;
         }
         if(ans==1||day==1)
         sum++;
         ans++;
         if(year==2020&&month==10&&day==1)
         printf("%d",sum);    
       }
}
    }
    return 0;
}

2、等差素数数列:这道题就是先找到一个开头的素数,然后再确定公差就能确定具体的每个数,再判断每个数是不是素数,依次这样,当找到了第九个数都满足,则找到了这个公差。枚举

代码如下:

#include <stdio.h>
#include <stdlib.h>

int sushu(int b){
    int a;
    for(a=2;a<b/2;a++)
    {
      if(b%a==0)
      return 0;
    }
    return 1;
  }

int main(int argc, char *argv[])
{
  // 请在此输入您的代码
  int sum=0;
    for(int i=2;i<50000;i++)  //枚举首项
    if(sushu(i)) //当首项是素数时  接着寻找下一项
    {
        for(int j=2;j<1000;j++)  //枚举公差
        {
            for(int t=0;t<10;t++)  //找10个 
            {
                if(sushu(i+j*t))  //等差数列 
                {
                    sum++;
                }
                else{
                    sum=0;
                    break;
                }
                if(sum==9)
                {
                    printf("%d",j);
                    return 0;
                }
                
            }
             
         } 
     } 
  return 0;
}

3、组队:就是每个位置取一个人,然后用暴力算法排列组合算出和,再判断每个人不能重复上两个以上的位置,取最大的和就好了。

代码如下:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
  // 请在此输入您的代码
  int aa[]={97,92,0,0,89,82,0,0,0,95,0,0,94,0,0,0,98,93,0,0};
  int bb[]={90,85,0,0,83,86,0,97,0,99,0,0,91,83,0,0,83,87,0,99};
  int cc[]={0,96,0,0,97,0,0,96,89,0,96,0,0,87,98,0,99,92,0,96};
  int dd[]={0,0,0,80,0,0,87,0,0,0,97,93,0,0,97,93,98,96,89,95};
  int ee[]={0,0,93,86,0,0,90,0,0,0,0,98,0,0,98,86,81,98,92,81};
  int a,b,c,d,e,n,max=0;
  for(a=1;a<=20;a++)
  for(b=1;b<=20;b++)
  for(c=1;c<=20;c++)
  for(d=1;d<=20;d++)
  for(e=1;e<=20;e++)
  {
  n=aa[a]+bb[b]+cc[c]+dd[d]+ee[e];
  if(max<=n&&a!=b&&a!=c&&a!=d&&a!=e&&b!=c&&b!=d&&b!=e&&c!=d&&c!=e&&d!=e)
  max=n;
  }
  printf("%d",max);
  return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值