1. 程式人生 > >資訊學奧賽一本通(C++版)第一部分 C++語言 第三章 程式的控制結構

資訊學奧賽一本通(C++版)第一部分 C++語言 第三章 程式的控制結構

第三章 程式的控制結構

第一節 if選擇結構

T1039 : 判斷數正負

【題目描述】

  給定一個整數NN,判斷其正負。如果N>0N>0,輸出positive;如果N=0N=0,輸出zero;如果N<0N<0,輸出negative

【輸入】

  一個整數N(109N109)N(−10^{9}≤N≤10^{9})

【輸出】

  如果N>0N>0,輸出positive;

  如果N=0N=0,輸出zero;

  如果N<0N<0,輸出negative

【輸入樣例】

1

【輸出樣例】

positive

【答案&程式碼】

#include<stdio.h>
#include<math.h>
int main(void){
	int n;
	scanf("%d",&n);
	if(n>0)
		printf("positive");
	else if(n==0)
		printf("zero");
	else
		printf("negative");
	return 0;
}

T1040 : 輸出絕對值

【題目描述】

  輸入一個浮點數,輸出這個浮點數的絕對值,保留到小數點後兩位。

【輸入】

  輸入一個浮點數,其絕對值不超過10000

10000

【輸出】

  輸出這個浮點數的絕對值,保留到小數點後兩位。

【輸入樣例】

-3.14

【輸出樣例】

3.14

【答案&程式碼】

#include<stdio.h>
int main(void){
	double n;
	scanf("%lf",&n);
	if(n>=0)
		printf("%.2f",n);
	else
		printf("%.2f",-1*n);
	return 0;
}

T1041 : 奇偶數判斷

【題目描述】

  給定一個整數,判斷該數是奇數還是偶數。如果nn是奇數,輸出odd;如果nn是偶數,輸出even

【輸入】

  輸入僅一行,一個大於零的正整數n

n

【輸出】

  輸出僅一行,如果nn是奇數,輸出odd;如果nn是偶數,輸出even

【輸入樣例】

5

【輸出樣例】

odd

【答案&程式碼】

#include<stdio.h>
int main(void){
	int n;
	scanf("%d",&n);
	if(n%2==0)
		printf("even");
	else
		printf("odd");
	return 0;
}

T1042 : 奇偶ASCII值判斷

【題目描述】

  任意輸入一個字元,判斷其ASCII是否是奇數,若是,輸出YES,否則,輸出NO。例如,字元AASCII值是65,則輸出YES,若輸入字元B(ASCII值是66),則輸出NO

【輸入】

  輸入一個字元。

【輸出】

  如果其ASCII值為奇數,則輸出YES,否則,輸出NO

【輸入樣例】

A

【輸出樣例】

YES

【答案&程式碼】

#include<stdio.h>
int main(void){
	char ch;
	scanf("%c",&ch);
	if(ch%2==0)
		printf("NO");
	else
		printf("YES");
	return 0;
}

T1043 : 整數大小比較

【題目描述】

  輸入兩個整數,比較它們的大小。若x&gt;yx&gt;y,輸出>;若x=yx=y,輸出=;若x&lt;yx&lt;y,輸出<

【輸入】

  一行,包含兩個整數xxyy,中間用單個空格隔開。0x&lt;232,231y&lt;2310≤x&lt;2^{32},−2^{31}≤y&lt;2^{31}

【輸出】

  一個字元。若x&gt;yx&gt;y,輸出>;若x=yx=y,輸出=;若x&lt;yx&lt;y,輸出<

【輸入樣例】

1000 100

【輸出樣例】

>

【答案&程式碼】

#include<stdio.h>
int main(void){
	int x,y;
	scanf("%d%d",&x,&y);
	if(x>y)
		printf(">");
	else if(x==y)
		printf("=");
	else
		printf("<");
	return 0;
}

T1044 : 判斷是否為兩位數

【題目描述】

  判斷一個正整數是否是兩位數(即大於等於1010且小於等於9999)。若該正整數是兩位數,輸出11,否則輸出00

【輸入】

  一個正整數,不超過10001000

【輸出】

  一行。若該正整數是兩位數,輸出11,否則輸出00

【輸入樣例】

54

【輸出樣例】

1

【答案&程式碼】

#include<stdio.h>
int main(void){
	int x,y;
	scanf("%d%d",&x,&y);
	if(x>y)
		printf(">");
	else if(x==y)
		printf("=");
	else
		printf("<");
	return 0;
}

T1045 : 收集瓶蓋贏大獎

【題目描述】

  某飲料公司最近推出了一個“收集瓶蓋贏大獎”的活動:如果你擁有1010個印有“幸運”、或2020個印有“鼓勵”的瓶蓋,就可以兌換一個神祕大獎。現分別給出你擁有的印有“幸運”和“鼓勵”的瓶蓋數,判斷是否可以去兌換大獎。若可以兌換大獎,輸出11,否則輸出00

【輸入】

  一行,包含兩個整數,分別是印有“幸運”和“鼓勵”的瓶蓋數,用一個空格隔開。

【輸出】

  一行。若可以兌換大獎,輸出11,否則輸出00

【輸入樣例】

11 19

【輸出樣例】

1

【答案&程式碼】

#include<stdio.h>
int main(void){
	int xy,gl;
	scanf("%d%d",&xy,&gl);
	if(xy>=10||gl>=20)
		printf("1");
	else
		printf("0");
	return 0;
}

T1046 : 判斷一個數能否同時被3和5整除

【題目描述】

  判斷一個數nn能否同時被3355整除,如果能同時被3355整除輸出YES,否則輸出NO

【輸入】

  輸入一行,包含一個整數nn(1,000,000&lt;n&lt;1,000,000)(-1,000,000&lt;n&lt;1,000,000)

【輸出】

  輸出一行,如果能同時被3355整除輸出YES,否則輸出NO

【輸入樣例】

15

【輸出樣例】

YES

【答案&程式碼】

#include<stdio.h>
int main(void){
	int num;
	scanf("%d",&num);
	if(num%3==0&&num%5==0)
		printf("YES");
	else
		printf("NO");
	return 0;
}

T1047 : 判斷能否被3,5,7整除

【題目描述】

  給定一個整數,判斷它能否被3,5,73,5,7整除,並輸出以下資訊:

  1. 能同時被3,5,73,5,7整除(直接輸出3573 5 7,每個數中間一個空格);

  2. 只能被其中兩個數整除(輸出兩個數,小的在前,大的在後。例如:353 5或者373 7或者575 7,中間用空格分隔);

  3. 只能被其中一個數整除(輸出這個除數);

  4. 不能被任何數整除,輸出小寫字元n,不包括單引號。

【輸入】

  輸入一行,包括一個整數。

【輸出】

  輸出一行,按照描述要求給出整數被3,5,73,5,7整除的情況。

【輸入樣例】

105

【輸出樣例】

3 5 7

【答案&程式碼】

#include<stdio.h>
int main(void){
	int num;
	scanf("%d",&num);
	if(num%105==0)
		printf("3 5 7");
	else if(num%3==0||num%5==0||num%7==0){
		if(num%3==0)
			printf("3 ");
		if(num%5==0)
			printf("5 ");
		if(num%7==0)
			printf("7 ");
	}
	else
		printf("n");
	return 0;
}

T1048 : 有一門課不及格的學生

【題目描述】

  給出一名學生的語文和數學成績,判斷他是否恰好有一門課不及格(成績小於6060分)。若該生恰好有一門課不及格,輸出11;否則輸出00

【輸入】

  一行,包含兩個在00100100之間的整數,分別是該生的語文成績和數學成績。

【輸出】

  若該生恰好有一門課不及格,輸出11;否則輸出00

【輸入樣例】

50 80

【輸出樣例】

1

【答案&程式碼】

#include<stdio.h>
int main(void){
	int ch,ma;
	scanf("%d%d",&ch,&ma);
	if(ch<60&&ma>=60)
		printf("1");
	else if(ch>=60&&ma<60)
		printf("1");
	else
		printf("0");
	return 0;
}

第二節 switch語句

T1049 : 晶晶赴約會

【題目描述】

  晶晶的朋友貝貝約晶晶下週一起去看展覽,但晶晶每週的1,3,51,3,5有課必須上課,請幫晶晶判斷她能否接受貝貝的邀請,如果能輸出YES;如果不能則輸出NO。注意YESNO都是大寫字母!

【輸入】

  輸入有一行,貝貝邀請晶晶去看展覽的日期,用數字1177表示從星期一到星期日。

【輸出】

  輸出有一行,如果晶晶可以接受貝貝的邀請,輸出YES,否則,輸出NO。注意YESNO都是大寫字母!

【輸入樣例】

2

【輸出樣例】

YES

【答案&程式碼】

#include<stdio.h>
int main(void){
	int d;
	scanf("%d",&d);
	switch(d){
		case 1:
		case 3:
		case 5:
				printf("NO");break;
		default:
				printf("YES");break;
	}
	return 0;
}

T1050 : 騎車與走路

【題目描述】

  在清華校園裡,沒有自行車,上課辦事會很不方便。但實際上。並非去辦任何事情都是騎車快,因為騎車總要找車、開鎖、停車、鎖車等,這要耽誤一些時間。假設找到自行車,開鎖並車上自行車的時間為2727秒;停車鎖車的時間為2323秒;步行每秒行走1.21.2米,騎車每秒行走3.03.0米。請判斷走不同的距離去辦事,是騎車快還是走路快。如果騎車快,輸出一行Bike;如果走路快,輸出一行Walk;如果一樣快,輸出一行All

【輸入】

  輸入一行,包含一個整數,表示一次辦事要行走的距離,單位為米。

【輸出】

  輸出一行,如果騎車快,輸出一行Bike;如果走路快,輸出一行Walk;如果一樣快,輸出一行All

【輸入樣例】

120

【輸出樣例】

Bike

【答案&程式碼】

#include<stdio.h>
int main(void){
	int len;
	scanf("%d",&len);
	if(50+(double)len/3.0>(double)len/1.2)
		printf("Walk");
	else if(50+(double)len/3.0==(double)len/1.2)
		printf("All");
	else
		printf("Bike");
	return 0;
}

T1051 : 分段函式

【題目描述】

  編寫程式,計算下列分段函式y=f(x)y=f(x)的值。結果保留到小數點後三位。

	y=−x+2.5;          (0  ≤x<  5)
	y=2−1.5(x−3)(x−3)  (5  ≤x< 10)
	y=x2−1.5           (10 ≤x< 20)

【輸入】

  一個浮點數N(0N&lt;20)N(0≤N&lt;20)。<