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;
}