山东科技大学OJ 输出月历

 这题可以用暴力方法解题,你可以想一想呀,一共就输入7个数字,对应7个月历呗,用switch函数一个一个找,肯定会AC的,哈哈哈。

原谅我开头就勿扰了大家,这题其实用十四五行代码就能搞定,这个就要用到一个查找的方法啦

再透露这个终极代码之前我先把我当时傻乎乎啥蠢蠢的代码先给大家看一下:

#include <stdio.h>
int main()
{
    int i,j,a;
    
    scanf("%d",&a);
    
    if(a==7) a=0;
    
    else a=a;
    
    printf("Sun Mon Tue Wen Thu Fri Sat\n");
    
    for(i=1; i<=a; i++)  printf("%4c",' ');
    
    for(j=1; j<=30; j++)
    {
        if((j+a)%7==0)
        {
            printf("%3d",j) ;
            printf("\n");
        }
        else
            printf("%3d ",j);
    }
    
 return 0;
}

 以上就是我的稚嫩的代码,遵循了一般的格式输出。但看起来还是怪怪的。

下面来看一下用查找的方法做的吧:

#include <stdio.h>
int a;
int week[]={7,1,2,3,4,5,6};
int main()
{
    while(scanf("%d",&a)!=EOF&&a)
    {
        printf("Sun Mon Tue Wen Thu Fri Sat\n");
        int i=0;
        while(week[i++]!=a)
            printf("    ");
        for(int j=0;j<30;j++)
            printf("%3d%c",j+1,((i+j)%7!=0)&&j!=29? ' ':'\n');
    }
    return 0;
}

这就是用查找的好处,减少了很大一部分代码量。让我来解读一下这个代码吧;

首先定义一个数组将要输入的数与之对应,定义i为0,实行++操作若未找到就输出四个空格,找到那就停止,在输入后面的29个数,同时要注意空格与换行,在这我用了三目运算符,又减少了一部分代码,但需要思考一定时间,在后面的j!=29的意思就是已经输出到30,  这时候就要输出换行符了。

猜你喜欢

转载自blog.csdn.net/weixin_43820496/article/details/85052375
今日推荐