C 语言教程 在线

1650c-exercise-example4

参考方法:

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

int main(void)
{ 
    int year,month,day,a=0;
     printf("\n请输入年、月、日,格式为:年 月日(2015 12 10)\n");
    scanf("%d%d%d",&year,&month,&day);
    int alldays=0;
    if((year%4==0 && year%100!=0) || year%400==0)
        a=1;
    switch(month-1)
    {
        case 11:alldays=alldays+30;
        case 10:alldays=alldays+31;
        case 9:alldays=alldays+30;
        case 8:alldays=alldays+31;
        case 7:alldays=alldays+31;
        case 6:alldays=alldays+30;
        case 5:alldays=alldays+31;
        case 4:alldays=alldays+30;
        case 3:alldays=alldays+31;
        case 2:alldays=alldays+(28+a);
        case 1:alldays=alldays+31;
    }

    alldays=alldays+day;
    printf("year:%d\nmonth:%d\nday:%d\nalldays:%d\n",year,month,day,alldays);
}

1649c-exercise-example4

参考方法:

#include<stdio.h>
int main()
{
    printf("请输入日期(格式:xxxx.xx.xx):");
    int year,month,date;
    scanf("%d.%d.%d",&year,&month,&date);
    int md[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};/*多写一个,方便标号*/
    /*判断是否是闰年*/
    if(((year%4==0)&&(year%100!=0))||(year%400==0)) {
        md[2]+=1;
    }
    /*判断日期符合实际*/
    if(year<=0||month<1||month>12||date<1||date>md[month]) {
        printf("输入数据无效!\n");
        return 0;
    }
    int mi,days=0;
    for (mi=0;mi<month;mi++) {
        days+=md[mi];
    }
    printf("%d.%d.%d是这一年的第%d天。\n",year,month,date,days+date);
    return 0;
}

1648c-exercise-example4

参考方法:

#include<stdio.h>
int main()
{
    int year, month, day,sumday=0;
    int monthday[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
    printf("请输入年、月、日,格式为:年,月,日(2015,12,10)\n");
    scanf("%d,%d,%d",&year,&month,&day);
    if (year % 400 == 0 || (year % 100 != 0 && year % 4 == 0))
    {
        monthday[1] =29;
    }
    for (int i = 0; i < month-1; i++)
    {
        sumday += monthday[i];
    }
    sumday += day;
    printf("%d\n",sumday);
    return 0;
}

1647c-exercise-example3

既然是计算机解题,那么就用最笨的方法,尽量少动脑筋。

分析:假设这个数是 x,那么有 x+100=a*a,x+268=b*b。找到满足 b*b-a*a=168 的数,就能找到 x。

#include<stdio.h>

int main(){
    int a,b;
    for(b=13;b*b-(b-1)*(b-1)<=168;b++){//如果你不知道第一个大于168的平方数,可以设置b=1;
        for(a=0;a<b;a++){
            if(b*b-a*a==168) 
                printf("%d  ",a*a-100);
        }
    }
}

1646c-exercise-example3

我的思路是这样:关键是两个平方数之差是168,于是搜索所有符合条件的平方数。i 为比较小的那个,j 为比较大的那个。符合 j*j-i*i=168 时,x 就等于 i*i-100。

搜索 i 时,如果 (i+1) 的平方减去i的平方都比 168 大,那就不用搜索,不可能符合条件了。搜索 j 时,从 i+1 开始搜索,如果 j 平方 -i 平方 比 168 大,那也没必要搜索了。

#include<stdio.h>
#include<math.h>

int main(void){
    for (int i = 0; (i+1)*(i+1)-i*i <= 168 ; ++i)
    {
        for (int j = i+1; j*j-i*i<=168 ; ++j)
        {
            if(j*j-i*i==168) {
                printf("j = %d,i = %d,j*j-i*i=%d\n", j,i,j*j-i*i);
                printf("x = %d\n", i*i-100);
            }
            
        }
    }
}