1. 程式人生 > >山東科技大學OJ 輸出月曆

山東科技大學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,  這時候就要輸出換行符了。