C语言相关算法

给出年,月,日,计算改日是该年的第几天

#include<stdio.h>
void main()
{
int year,month,day;
int mo[12]={31,28,31,30,31,30,31,31,30,31,30,31};
scanf("%d %d %d",&year,&month,&day);
int d,i;
d=day;
if((year%4==0&&year%100!=0)||year%400==0)
{
mo[1]=29;
}
for(i=0;i<month-1;i++)
{
d+=mo[i];
}
printf("%d\n",d);
}


#include<stdio.h>
#define M 3
#define N 3
struct cour{
double score;
};
struct stu{
int sno;
struct cour course[M];
}student[N];


void printMessage()
{
int i,j;
for(i=0;i<N;i++)
{
for(j=0;j<M;j++)
{
if(student[i].course[j].score<60)
{
printf("sno:%d\n",student[i].sno);
for(j=0;j<M;j++)
{
printf("score:%f\n",student[i].course [j].score);
}
}
}
}
}
void main()
{
student[0].sno =1;
student[0].course [0].score =62;
student[0].course [1].score =80;
student[0].course [2].score =62;

student[1].sno =2;
student[1].course [0].score =62;
student[1].course [1].score =50;
student[1].course [2].score =62;

student[2].sno =3;
student[2].course [0].score =62;
student[2].course [1].score =80;
student[2].course [2].score =46;


printMessage();
}

获取两个日期间天数

1.如果两个日期是同一年,则两日期间天数等于两个日期在这一年的第几天相减;

2.如果两个日期不是同一年,则两个日期间的天数等于两日期间相隔年份的天数加上,靠前日期在本年所剩天数加上靠后日期在本年的天数。

#include<stdio.h>

/*
计算此天在这一年中是第几天
*/
int getDaysInYear(int year,int month,int day)
{
int i,daynum=day;
int days[12]={31,29,31,30,31,30,31,31,30,31,30,31};
if((year%4==0&&year%100!=0)||year%400==0)
{
days[1]=29;
}
else
{
days[1]=28;
}
for(i=0;i<month-1;i++)
{
daynum+=days[i];
}
return daynum;
}
//获取两个年份之间的年份的天数
int getDaysByYear(int year1,int year2)
{
int dayCount=0;
int i=year1+1;
for(i;i<year2;i++)
{
if((i%4==0&&i%100!=0)||i%400==0)
{
dayCount+=366;
}
else
{
dayCount+=365;
}
}
return dayCount;
}


//获取这一年中剩余的天数
int remainDays(int year,int days)
{
int remainDays;
if((year%4==0&&year%100!=0)||year%100==0)
{
remainDays=366-days;
}
else
{
remainDays=365-days;
}
return remainDays;
}


void main()
{
int dayCount=0;
int year1,month1,day1,dinyear1;
int year2,month2,day2,dinyear2;
printf("请输入年月日\n");
scanf("%d %d %d",&year1,&month1,&day1);
dinyear1=getDaysInYear(year1,month1,day1);
dayCount+=remainDays(year1,dinyear1);
printf("请输入年月日\n");
scanf("%d %d %d",&year2,&month2,&day2);
dinyear2=getDaysInYear(year2,month2,day2);
if(year1==year2)
{
dayCount=dinyear2-dinyear1;
}
else
{
dayCount+=getDaysByYear(year1,year2);
dayCount+=dinyear2;
}
printf("两个日期间有%d天\n",dayCount);
}

2.求200之内的水仙花数

#include<stdio.h>
//取百位数
int getBudweiser(int num)
{
return num/100;
}
//获取十位数
int getTensDigit(int num)
{
int i= num%100;
return i/10;
}
int getSingleDigit(int num)
{
return num%10;
}
int getLiFang(int num)
{
return num*num*num;
}
void main()
{
int i;
int budweiser,tensdigit,singledigit;
for(i=0;i<=200;i++)
{
budweiser=getBudweiser(i);
tensdigit=getTensDigit(i);
singledigit=getSingleDigit(i);
if(getLiFang(budweiser)+getLiFang(tensdigit)+getLiFang(singledigit)==i)
{
printf("%d ",i);
}
}
}



//找出所有200以内(含200)满足i,i+4,i+10都是素数的整数i(i+10也在200内)

#include<stdio.h>
#include<math.h>
bool isPrime(int num)
{
int i;
int k=(int)sqrt(num);
for(i=2;i<=k;i++)
{
if(num%i==0)
break;
}
if(i>k)
return true;
else
return false;
}
void main()
{
int i;
for(i=2;i<191;i++)
{
if(isPrime(i)&&isPrime(i+4)&&isPrime(i+10))
{
printf("%d符合条件\n",i);
}
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值