中國大學MOOC-翁愷-C語言程序設計習題集 02-0 到 04-4


02-0. 整數四則運算(10)

時間限制
400 ms
內存限制
65536 kB
代碼長度限制
8000 B
判題程序
Standard
作者
喬林(清華大學)

本題要求編寫程序,計算2個正整數的和、差、積、商並輸出。題目保證輸入和輸出全部在整型范圍內。

輸入格式:

輸入在一行中給出2個正整數A和B。

輸出格式:

在4行中按照格式“A 運算符 B = 結果”順序輸出和、差、積、商。

輸入樣例:
3 2 
輸出樣例:
3 + 2 = 5 3 - 2 = 1 3 * 2 = 6 3 / 2 = 1
代碼:
#include<stdio.h>
#include<stdlib.h>

int main()
{
    int a,b;
    while(scanf("%d%d",&a,&b)==2)
    {
        printf("%d + %d = %d\n",a,b,a+b);
        printf("%d - %d = %d\n",a,b,a-b);
        printf("%d * %d = %d\n",a,b,a*b);
        printf("%d / %d = %d\n",a,b,a/b);
    }
    return 0;
}


02-1. 厘米換算英尺英寸(15)

時間限制
400 ms
內存限制
65536 kB
代碼長度限制
8000 B
判題程序
Standard
作者
翁愷(浙江大學)

如果已知英制長度的英尺foot和英寸inch的值,那么對應的米是(foot+inch/12)*0.3048。現在,如果用戶輸入的是厘米數,那么對應英制長度的英尺和英寸是多少呢?別忘了1英尺等於12英寸。

輸入格式:

輸入在一行中給出1個正整數,單位是厘米。

輸出格式:

在一行中輸出這個厘米數對應英制長度的英尺和英寸的整數值,中間用空格分開。

輸入樣例:
170 
輸出樣例:
5 6
代碼:
#include<stdio.h>
#include<stdlib.h>
int main()
{
    int cm;
    while(scanf("%d",&cm)==1)
    {
        int foot,inch;
        double m=(double)cm*1.0/100;
        foot=m/0.3048;
        inch=(m*1.0/0.3048-foot)*12;
        printf("%d %d\n",foot,inch);
    }
    return 0;
}

02-2. 然后是幾點(15)

時間限制
400 ms
內存限制
65536 kB
代碼長度限制
8000 B
判題程序
Standard
作者
翁愷(浙江大學)

有時候人們用四位數字表示一個時間,比如1106表示11點零6分。現在,你的程序要根據起始時間和流逝的時間計算出終止時間。 讀入兩個數字,第一個數字以這樣的四位數字表示當前時間,第二個數字表示分鍾數,計算當前時間經過那么多分鍾后是幾點,結果也表示為四位數字。當小時為個位數時,沒有前導的零,即5點30分表示為530。注意,第二個數字表示的分鍾數可能超過60,也可能是負數。

輸入格式:

輸入在一行中給出2個整數,分別是四位數字表示的起始時間、以及流逝的分鍾數,其間以空格分隔。注意:在起始時間中,當小時為個位數時,沒有前導的零,即5點30分表示為530;流逝的分鍾數可能超過60,也可能是負數。

輸出格式:

輸出四位數字表示的終止時間。題目保證起始時間和終止時間在同一天內。

輸入樣例:
1120 110 
輸出樣例:
1310 
代碼:
#include<stdio.h>
#include<stdlib.h>
int main()
{
    int curTime,lastTime;
    while(scanf("%d%d",&curTime,&lastTime)==2)
    {
    	int hour=curTime/100;
    	int minute=curTime%100;
        int sumTime=hour*60+minute;
        sumTime+=lastTime;
		printf("%d%d",sumTime/60,sumTime%60);
		if(sumTime%60==0)
		{
			printf("0");
		}
		printf("\n");
	}
    return 0;
}

02-3. 逆序的三位數(10)

時間限制
400 ms
內存限制
65536 kB
代碼長度限制
8000 B
判題程序
Standard
作者
翁愷(浙江大學)

程序每次讀入一個正3位數,然后輸出按位逆序的數字。注意:當輸入的數字含有結尾的0時,輸出不應帶有前導的0。比如輸入700,輸出應該是7。

輸入格式:

每個測試是一個3位的正整數。

輸出格式:

輸出按位逆序的數。

輸入樣例:
123 
輸出樣例:
321
代碼:
#include<stdio.h>
#include<stdlib.h>
int main()
{
	int num;
	while(scanf("%d",&num)==1)
	{
		int a=num%10;
		int b=num%100/10;
		int c=num/100;
		if(a!=0)
		{
			printf("%d%d%d\n",a,b,c);
	    	continue;
		}
	    if(a==0&&b!=0)
	    {
	    	printf("%d%d\n",b,c);
	    	continue;
		}
	    if(a==0&&b==0)
	    {
	    	printf("%d\n",c);
	    	continue;
		}
	}
	return 0;
}

02-4. BCD解密(10)

時間限制
400 ms
內存限制
65536 kB
代碼長度限制
8000 B
判題程序
Standard
作者
翁愷(浙江大學)

BCD數是用一個字節來表達兩位十進制的數,每四個比特表示一位。所以如果一個BCD數的十六進制是0x12,它表達的就是十進制的12。但是小明沒學過BCD,把所有的BCD數都當作二進制數轉換成十進制輸出了。於是BCD的0x12被輸出成了十進制的18了!

現在,你的程序要讀入這個錯誤的十進制數,然后輸出正確的十進制數。提示:你可以把18轉換回0x12,然后再轉換回12。

輸入格式:

輸入在一行中給出一個[0, 153]范圍內的正整數,保證能轉換回有效的BCD數,也就是說這個整數轉換成十六進制時不會出現A-F的數字。

輸出格式:

輸出對應的十進制數。

輸入樣例:
18 
輸出樣例:
12
代碼:
#include<stdio.h>
#include<stdlib.h>
int main()
{
    int num;
    while(scanf("%d",&num)==1)
    {
        int a,b;
        a=num/16;
        b=num%16;
        if(a==0)
        {
            printf("%d\n",b);
            continue;
        }
        printf("%d%d\n",a,b);
    }
    return 0;
}

03-0. 超速判斷(10)

時間限制
400 ms
內存限制
65536 kB
代碼長度限制
8000 B
判題程序
Standard
作者
楊起帆(浙江大學城市學院)

模擬交通警察的雷達測速儀。輸入汽車速度,如果速度超出60 mph,則顯示“Speeding”,否則顯示“OK”。

輸入格式:

輸入在一行中給出1個不超過500的非負整數,即雷達測到的車速。

輸出格式:

在一行中輸出測速儀顯示結果,格式為:“Speed: V - S”,其中V是車速,S或者是Speeding、或者是OK。

輸入樣例1:
40 
輸出樣例1:
Speed: 40 - OK 
輸入樣例2:
75 
輸出樣例2:
Speed: 75 - Speeding
代碼:
#include<stdio.h>
#include<stdlib.h>
int main()
{
    int speed;
    while(scanf("%d",&speed)==1)
    {
        printf("Speed: %d - ",speed);
        if(speed>60)
            printf("Speeding\n");
        else
            printf("OK\n");
    }
    return 0;
}

03-1. 三天打魚兩天曬網(15)

時間限制
400 ms
內存限制
65536 kB
代碼長度限制
8000 B
判題程序
Standard

中國有句俗語叫“三天打魚兩天曬網”。假設某人從某天起,開始“三天打魚兩天曬網”,問這個人在以后的第N天中是“打魚”還是“曬網”?

輸入格式:

輸入在一行中給出1個不超過1000的正整數N。

輸出格式:

在一行中輸出此人在第N天中是“Fishing”(即“打魚”)還是“Drying”(即“曬網”),並且輸出“in day N”。

輸入樣例1:
103 
輸出樣例1:
Fishing in day 103 
輸入樣例2:
34 
輸出樣例2:
Drying in day 34
代碼:

#include<stdio.h>
#include<stdlib.h>
int main()
{
    int day;
    while(scanf("%d",&day)==1)
    {
        if(day%5==1||day%5==2||day%5==3)
        {
            printf("Fishing in day %d\n",day);
        }
        else
        {
             printf("Drying in day %d\n",day);
        }
    }
    return 0;
}


03-2. 用天平找小球(10)

時間限制
400 ms
內存限制
65536 kB
代碼長度限制
8000 B
判題程序
Standard

三個球A、B、C,大小形狀相同且其中有一個球與其他球重量不同。要求找出這個不一樣的球。

輸入格式:

輸入在一行中給出3個正整數,順序對應球A、B、C的重量。

輸出格式:

在一行中輸出唯一的那個不一樣的球。

輸入樣例:
1 1 2 
輸出樣例:
C
代碼:

#include<stdio.h>
#include<stdlib.h>
int main()
{
    int a,b,c;
    while(scanf("%d%d%d",&a,&b,&c)==3)
    {
        int res=0;
        res^=a;
        res^=b;
        res^=c;
        if(res==a)
            printf("A\n");
        if(res==b)
            printf("B\n");
        if(res==c)
            printf("C\n");
    }
    return 0;
}

03-3. 12-24小時制(15)

時間限制
400 ms
內存限制
65536 kB
代碼長度限制
8000 B
判題程序
Standard
作者
翁愷(浙江大學)

編寫一個程序,要求用戶輸入24小時制的時間,然后顯示12小時制的時間。

輸入格式:

輸入在一行中給出帶有中間的“:”符號(半角的冒號)的24小時制的時間,如12:34表示12點34分。當小時或分鍾數小於10時,均沒有前導的零,如5:6表示5點零6分。

提示:在scanf的格式字符串中加入“:”,讓scanf來處理這個冒號。

輸出格式:

在一行中輸出這個時間對應的12小時制的時間,數字部分格式與輸入的相同,然后跟上空格,再跟上表示上午的字符串“AM”或表示下午的字符串“PM”。如“5:6 PM”表示下午5點零6分。注意,在英文的習慣中,中午12點被認為是下午,所以24小時制的12:00就是12小時制的12:0 PM;而0點被認為是第二天的時間,所以是0:0 AM

輸入樣例:
21:11 
輸出樣例:
9:11 PM
代碼:

include<stdio.h>
#include<stdlib.h>
int main()
{
    int hour,minute;
    char c;
    while(scanf("%d%c%d",&hour,&c,&minute)==3)
    {
        if(hour==12)
            printf("%d:%d PM\n",hour,minute);
        if(hour>=0&&hour<12)
            printf("%d:%d AM\n",hour,minute);
        if(hour>12&&hour<=23)
        printf("%d:%d PM\n",hour-12,minute);
    }
    return 0;
}

03-4. 成績轉換(15)

時間限制
400 ms
內存限制
65536 kB
代碼長度限制
8000 B
判題程序
Standard
作者
沈睿(浙江大學)

本題要求編寫程序將一個百分制成績轉換為五分制成績。轉換規則:

  • 大於等於90分為A;
  • 小於90且大於等於80為B;
  • 小於80且大於等於70為C;
  • 小於70且大於等於60為D;
  • 小於60為E。

    輸入格式:

    輸入在一行中給出1個整數的百分制成績。

    輸出格式:

    在一行中輸出對應的五分制成績。

    輸入樣例:
    90 
    輸出樣例:
    A
  • 代碼:

    #include<stdlib.h>
    #include<stdio.h>
    int main()
    {
        int grade;
        while(scanf("%d",&grade)==1)
        {
            switch(grade/10)
            {
            case 10:
            case 9:
                printf("A\n");
                break;
            case 8:
                printf("B\n");
                break;
            case 7:
                printf("C\n");
                break;
            case 6:
                printf("D\n");
                break;
            default:
                printf("E\n");
                break;
            }
        }
        return 0;
    }

    04-0. 求符合給定條件的整數集(15)

    時間限制
    400 ms
    內存限制
    65536 kB
    代碼長度限制
    8000 B
    判題程序
    Standard
    作者
    徐鏡春(浙江大學)

    給定不超過6的正整數A,考慮從A開始的連續4個數字。請輸出所有由它們組成的無重復數字的3位數。

    輸入格式:

    輸入在一行中給出A。

    輸出格式:

    輸出滿足條件的的3位數,要求從小到大,每行6個整數。整數間以空格分隔,但行末不能有多余空格。

    輸入樣例:
    2 
    輸出樣例:
    234 235 243 245 253 254 324 325 342 345 352 354 423 425 432 435 452 453 523 524 532 534 542 543 
    代碼:
    #include<stdio.h>
    #include<stdlib.h>
    int main()
    {
       int num;
       int a[4];
       while(scanf("%d",&num)==1)
       {
           for(int i=0;i<4;i++)
           {
               a[i]=num+i;
           }
           int cnt=0;
           for(int i=0;i<4;i++)
           {
               for(int j=0;j<4;j++)
               {
                   for(int k=0;k<4;k++)
                   {
                       if(a[i]!=a[j]&&a[i]!=a[k]&&a[j]!=a[k])
                       {
                           if(cnt%6==0)
                               printf("%d",a[i]*100+a[j]*10+a[k]);
                           else
                               printf(" %d",a[i]*100+a[j]*10+a[k]);
                           cnt++;
                           if(cnt%6==0)
                           {
                              printf("\n");
                           }
                       }
                   }
               }
           }
       }
    }

    04-1. 水仙花數(20)

    時間限制
    2000 ms
    內存限制
    65536 kB
    代碼長度限制
    8000 B
    判題程序
    Standard
    作者
    徐鏡春(浙江大學)

    水仙花數是指一個N位正整數(N>=3),它的每個位上的數字的N次冪之和等於它本身。例 如:153 = 13 + 53+ 33。 本題要求編寫程序,計算所有N位水仙花數。

    輸入格式:

    輸入在一行中給出一個正整數N(3<=N<=7)。

    輸出格式:

    按遞增順序輸出所有N位水仙花數,每個數字占一行。

    輸入樣例:
    3 
    輸出樣例:
    153 370 371 407
    代碼:

    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    int pow(int num,int n)
    {
        int pro=1;
        for(int i=1;i<=n;i++)
        {
            pro*=num;
        }
        return pro;
    }
    int main()
    {
        int n;
        while(scanf("%d",&n)==1)
        {
            if(n==7)
            {
                printf("1741725\n4210818\n9800817\n9926315\n");
                continue;
            }
            int a[10];
            memset(a,0,sizeof(a));
            int start=1,last=1;
            for(int i=1;i<n;i++)
                start*=10;
            last=start*10;
            for(int i=start;i<last;i++)
            {
                int temp=i,cnt=0;
                while(temp)
                {
                   a[cnt++]=temp%10;
                   temp/=10;
                }
                int sumtemp=0;
                for(int j=0;j<cnt;j++)
                    sumtemp+=pow(a[j],n);
                if(sumtemp==i)
                    printf("%d\n",i);
            }
        }
    }

    04-2. 打印九九口訣表(15)

    時間限制
    400 ms
    內存限制
    65536 kB
    代碼長度限制
    8000 B
    判題程序
    Standard
    作者
    徐鏡春(浙江大學)

    下面是一個完整的下三角九九口訣表:

    1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9 1*4=4 2*4=8 3*4=12 4*4=16 1*5=5 2*5=10 3*5=15 4*5=20 5*5=25 1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36 1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49 1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64 1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81 

    本題要求對任意給定的1位正整數N,輸出從1*1到N*N的部分口訣表。

    輸入格式:

    輸入在一行中給出一個正整數N(1<=N<=9)。

    輸出格式:

    輸出下三角N*N部分口訣表,其中等號右邊數字占4位、左對齊。

    輸入樣例:
    4 
    輸出樣例:
    1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9 1*4=4 2*4=8 3*4=12 4*4=16 
    代碼:

    <span style="font-size:12px;">#include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    int main()
    {
        int n;
        while(scanf("%d",&n)==1)
        {
            for(int i=1;i<=n;i++)
            {
                for(int j=1;j<=i;j++)
                {
                    printf("%d*%d=%-4d",j,i,j*i);
                }
                printf("\n");
            }
        }
    }</span>

    04-3. 統計素數並求和(20)

    時間限制
    400 ms
    內存限制
    65536 kB
    代碼長度限制
    8000 B
    判題程序
    Standard
    作者
    張彤彧(浙江大學)

    本題要求統計給定整數M和N區間內素數的個數並對它們求和。

    輸入格式:

    輸入在一行中給出2個正整數M和N(1<=M<=N<=500)。

    輸出格式:

    在一行中順序輸出M和N區間內素數的個數以及它們的和,數字間以空格分隔。

    輸入樣例:
    10 31 
    輸出樣例:
    7 143

    代碼:

    #include<stdio.h>
    #include<string.h>
    #include<math.h>
    #include<stdlib.h>
    int prime(int n)
    {
        if(n==1) return 0;
        if(n==2) return 1;
        int k=floor(sqrt(n)+0.5);
        for(int i=2;i<=k;i++)
        {
            if(n%i==0)
                return 0;
        }
        return 1;
    }
    int main()
    {
        int start,last;
        while(scanf("%d%d",&start,&last)==2)
        {
            int cnt=0,sum=0;
            for(int i=start;i<=last;i++)
            {
                if(prime(i))
                {
                    cnt++;
                    sum+=i;
                }
            }
            printf("%d %d\n",cnt,sum);
        }
    }
    

    04-4. 猜數字游戲(15)

    時間限制
    400 ms
    內存限制
    65536 kB
    代碼長度限制
    8000 B
    判題程序
    Standard

    猜數字游戲是令系統隨機產生一個100以內的正整數,用戶輸入一個數對其進行猜測,需要你編寫程序自動對其與隨機產生的被猜數進行比較,並提示大了(“Too big”),還是小了(“Too small”),相等表示猜到了。如果猜到,則結束程序。程序還要求統計猜的次數,如果1次猜出該數,提示“Bingo!”;如果3次以內猜到該數,則提示“Lucky You!”;如果超過3次但是在N(>3)次以內(包括第N次)猜到該數,則提示“Good Guess!”;如果超過N次都沒有猜到,則提示“Game Over”,並結束程序。如果在到達N次之前,用戶輸入了一個負數,也輸出“Game Over”,並結束程序。

    輸入格式:

    輸入第一行中給出2個不超過100的正整數,分別是系統產生的隨機數、以及猜測的最大次數N。隨后每行給出一個用戶的輸入,直到出現負數為止。

    輸出格式:

    在一行中輸出每次猜測相應的結果,直到輸出猜對的結果或“Game Over”則結束。

    輸入樣例:
    58 4 70 50 56 58 60 -2
    代碼:

    #include<stdio.h>
    #include<string.h>
    #include<math.h>
    #include<stdlib.h>
    int main()
    {
        int num,n;
        while(scanf("%d%d",&num,&n)==2)
        {
            int nu,t=0,cnt=0,flag=0,a[200];
            while(scanf("%d",&nu)==1&&nu>=0)
            {
                a[t++]=nu;
            }
            for(int i=0;i<t;i++)
            {
                cnt++;
                if(a[i]<num&&cnt<=n&&flag==0)
                    printf("Too small\n");
                if(a[i]>num&&cnt<=n&&flag==0)
                    printf("Too big\n");
                if(a[i]==num&&cnt<=n&&flag==0)
                {
                    flag=1;
                    if(cnt==1)
                        printf("Bingo!\n");
                    if(cnt>1&&cnt<=3)
                        printf("Lucky You!\n");
                    if(cnt>3&&cnt<=n)
                        printf("Good Guess!\n");
                    return 0;
                }
                if(cnt>n&&flag==0)
                {
                    printf("Game Over\n");
                    return 0;
                }
            }
            if(t<n||cnt>n)
            {
                printf("Game Over\n");
                return 0;
            }
        }
    }

    版權聲明:本文為博主原創文章,未經博主允許不得轉載。


    免責聲明!

    本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



     
    粵ICP備18138465號   © 2018-2025 CODEPRJ.COM