程序設計與算法(一)第4周測驗(2020春季)


001:角谷猜想

  • 總時間限制: 1000ms 內存限制: 65536kB

描述

  • 所謂角谷猜想,是指對於任意一個正整數,如果是奇數,則乘3加1,如果是偶數,則除以2,得到的結果再按照上述規則重復處理,最終總能夠得到1。如,假定初始整數為5,計算過程分別為16、8、4、2、1。
    程序要求輸入一個整數,將經過處理得到1的過程輸出來。

輸入

  • 一個正整數N(N <= 2,000,000)

輸出

  • 從輸入整數到1的步驟,每一步為一行,每一部中描述計算過程。最后一行輸出"End"。如果輸入為1,直接輸出"End"。

樣例輸入

  • 5

樣例輸出

5*3+1=16
16/2=8
8/2=4
4/2=2
2/2=1
End

思考

AC

#include <iostream>
using namespace std;
int main(){
    long long N;	//注意范圍
    scanf("%d",&N);
    while (N != 1){
        if (N%2 == 0){	//偶數
            cout << N << "/2=" << N/2 << endl;	//這題有毒,不能用printf()通過
            N /= 2;
        }else{
            cout << N << "*3+1=" << N*3+1 << endl;
            N = N*3+1;
        }
    }
    printf("End\n");
    return 0;
}

002:正常血壓

  • 總時間限制: 1000ms 內存限制: 65536kB

描述

  • 監護室每小時測量一次病人的血壓,若收縮壓在90 - 140之間並且舒張壓在60 - 90之間(包含端點值)則稱之為正常,現給出某病人若干次測量的血壓值,計算病人保持正常血壓的最長小時數。

輸入

  • 第一行為一個正整數n,n < 100
  • 其后有n行,每行2個正整數,分別為一次測量的收縮壓和舒張壓,中間以一個空格分隔。

輸出

  • 輸出僅一行,血壓連續正常的最長小時數。

樣例輸入

4
100 80
90 50
120 60
140 90

樣例輸出

  • 2

思考

  • no

AC

#include <iostream>
int main(){
	int i,n,sum=0,p,q,max=0;
	scanf("%d",&n);
	for(i=1;i<=n;i++){
		scanf("%d %d",&p,&q);
		if((p>=90&&p<=140)&&(q>=60&&q<=90)){
			sum++;	//正常則計數
			if(sum>max){
				max=sum;	//記錄小時數 
			} 
		}else	sum=0;		
	}
	printf("%d\n",max);
	return 0;
}

003:數字反轉

  • 總時間限制: 1000ms 內存限制: 65536kB

描述

  • 給定一個整數,請將該數各個位上數字反轉得到一個新數。新數也應滿足整數的常見形式,即除非給定的原數為零,否則反轉后得到的新數的最高位數字不應為零(參見樣例2)。

輸入

  • 輸入共 1 行,一個整數N。
  • -1,000,000,000 ≤ N≤ 1,000,000,000。

輸出
輸出共 1 行,一個整數,表示反轉后的新數。
樣例輸入
樣例 #1:

  • 123

樣例 #2:

  • -380

樣例輸出
樣例 #1:

  • 321

樣例 #2:

  • -83

AC

#include <iostream>
using namespace std; 
int main(){
	long long n,m=0;
	scanf("%lld",&n);
	if(n<0){
		printf("-");	//輸出負號 
		n=-n;	//取正 
	}	
	while(n!=0){
		m=m*10+n%10;	////原數個位相當於新數最高位
		n /= 10;	//整除10,相當於刪除個位
	}
	printf("%lld\n",m);
	return 0;
} 

004:求特殊自然數

  • 總時間限制: 1000ms 內存限制: 65536kB

描述

  • 一個十進制自然數,它的七進制與九進制表示都是三位數,且七進制與九進制的三位數碼表示順序正好相反。編程求此自然數,並輸出顯示。

輸入

  • 無。

輸出

  • 三行:
  • 第一行是此自然數的十進制表示;
  • 第二行是此自然數的七進制表示;
  • 第三行是此自然數的九進制表示。
樣例輸入
(無)
樣例輸出
(不提供)

思考

  • 看到這道題,第一想法是數組,但又覺得太麻煩了,就打算試試直接弄,結果🆗
  • 直接化七進制或九進制,先思考一下可能的七進制或九進制的三位數的范圍,最小的數是七進制的(101)7,最大是九進制的(666)9,
  • 再根據題意“七進制與九進制的三位數碼表示順序正好相反”進行枚舉即可。

AC

#include <iostream>
using namespace std;
int main(){
	int i,x,y,z;
	for(i=100;i<667;i++){
		x=i/100;	//百位 
		y=i/10%10;	//十位 
		z=i%100;	//個位 
		if(x*7*7+y*7+z==z*9*9+y*9+x){
			printf("%d\n",x*7*7+y*7+z);
			printf("%d%d%d\n",x,y,z);
			printf("%d%d%d\n",z,y,x);
		}
	}
	return 0;
}

005:雇佣兵

  • 總時間限制: 1000ms 內存限制: 65536kB

描述

  • 雇佣兵的體力最大值為M,初始體力值為0、戰斗力為N、擁有X個能量元素。
  • 當雇佣兵的體力值恰好為M時,才可以參加一個為期M天的戰斗期,戰斗期結束體力值將為0。在同一個戰斗期內,雇佣兵每連續戰斗n天,戰斗力就會上升1點,n為當前戰斗期開始時的戰斗力。
  • 一個戰斗期結束后,雇佣兵需要用若干個能量元素使其體力恢復到最大值M,從而參加下一個戰斗期。每個能量元素恢復的體力值不超過當前的戰斗力。每個能量元素只能使用一次。
  • 請問:雇佣兵的戰斗力最大可以到達多少。

輸入

  • 一行包括三個整數M、N、X,相鄰兩個整數之間用單個空格隔開。M、N、X均為不超過10000的正整數。

輸出

  • 輸出一個整數,為雇佣兵的最大戰斗力。

樣例輸入

  • 5 2 10

樣例輸出

  • 6

思考

  • 體力的初始值是0,但是有能量元素,x>0,需要用能量元素恢復體力才能進行戰斗。因此可以用一個while循環
  • 當體力達到最大值M時,就進行為期M天的戰斗。如果m>n,則n+=m/n,這時能量元素x-=m/n;如果m<n,直接輸出n。
  • 戰斗結束后,體力值為0,用能量元素進行恢復。如果當前的能量元素小於所需的能量元素,即x<m/n,則直接輸出n。
  • 一直循環,直到能量元素用完。

AC

#include <iostream>
using namespace std;
int main(){
	int M,X,N,num=0; 
	scanf("%d %d %d",&M,&N,&X);//體力,戰斗力、能量元素 
	while(X>0){
		if(M%N==0)	//消耗能源元素 
			num=M/N;
		else
			num=M/N+1;
		if(X<num)	break;
		X -= num;
		N += M/N;	//戰斗 
	} 
	printf("%d\n",N);
	return 0;
} 

006:數字統計

  • 總時間限制: 1000ms 內存限制: 65536kB

描述

  • 請統計某個給定范圍[L, R]的所有整數中,數字2出現的次數。
  • 比如給定范圍[2, 22],數字2在數2中出現了1次,在數12中出現1次,在數20中出現1次,在數21中出現1次,在數22中出現2次,所以數字2在該范圍內一共出現了6次。

輸入

  • 輸入共 1 行,為兩個正整數 L 和 R,之間用一個空格隔開。

輸出

  • 輸出共 1 行,表示數字 2 出現的次數。

樣例輸入

樣例 #12 22

樣例 #22 100

樣例輸出

樣例 #16

樣例 #220

思考

  • 枚舉+取余+判斷

AC

#include <iostream>
using namespace std;
int main(){
	int L,R,i,num=0,j;
	scanf("%d %d",&L,&R);
	for(i=L;i<=R;i++)	//枚舉范圍 
		for(j=i;j>0;j=j/10)	 
			if(j%10==2) num++;	//判斷是否為2 
	printf("%d\n",num);
	return 0;
}

第四周全部題解,🆗。


免責聲明!

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



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