PAT計(jì)算機(jī)能力考試乙級1-10題答案_第1頁
PAT計(jì)算機(jī)能力考試乙級1-10題答案_第2頁
PAT計(jì)算機(jī)能力考試乙級1-10題答案_第3頁
PAT計(jì)算機(jī)能力考試乙級1-10題答案_第4頁
PAT計(jì)算機(jī)能力考試乙級1-10題答案_第5頁
已閱讀5頁,還剩33頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

PAT計(jì)算機(jī)能力考試乙級1-10題答案PAT計(jì)算機(jī)能力考試乙級1-10題答案PAT計(jì)算機(jī)能力考試乙級1-10題答案V:1.0精細(xì)整理,僅供參考PAT計(jì)算機(jī)能力考試乙級1-10題答案日期:20xx年X月1001

害死人不償命的(3n+1)猜想

(15分對任何一個(gè)正整數(shù)

n,如果它是偶數(shù),那么把它砍掉一半;如果它是奇數(shù),那么把

(3n+1)

砍掉一半。這樣一直反復(fù)砍下去,最后一定在某一步得到

n=1??ɡ澰?950年的世界數(shù)學(xué)家大會上公布了這個(gè)猜想,傳說當(dāng)時(shí)耶魯大學(xué)師生齊動(dòng)員,拼命想證明這個(gè)貌似很傻很天真的命題,結(jié)果鬧得學(xué)生們無心學(xué)業(yè),一心只證

(3n+1),以至于有人說這是一個(gè)陰謀,卡拉茲是在蓄意延緩美國數(shù)學(xué)界教學(xué)與科研的進(jìn)展……我們今天的題目不是證明卡拉茲猜想,而是對給定的任一不超過1000的正整數(shù)

n,簡單地?cái)?shù)一下,需要多少步(砍幾下)才能得到

n=1

分析:輸入一個(gè)正整數(shù)n進(jìn)行循環(huán),n=1循環(huán)截止,判斷n,如果它是偶數(shù),那么把它砍掉一半;如果它是奇數(shù),那么把

(3n+1)

砍掉一半。這樣一直反復(fù)砍下去,最后一定在某一步得到

n=1,并計(jì)算經(jīng)過的次數(shù)m。#include"stdlib.h"#include"stdio.h"intmain(){ intn,m; m=0; scanf_s("%d",&n); while(n!=1) { if(n%2==0) { n=n/2; } else { n=(3*n+1)/2; } m++; } printf_s("%d\n",m); system("pause");}1002

寫出這個(gè)數(shù)

(20分)讀入一個(gè)正整數(shù)

n,計(jì)算其各位數(shù)字之和,用漢語拼音寫出和的每一位數(shù)字。分析:輸入一個(gè)正整數(shù)n,while循環(huán)求出n的各位數(shù)字之和sum;如果sum等于0,那么就輸出它的拼音”ling”;如果不等于0,輸入數(shù)組b存放各位數(shù)字之和,在switch對這個(gè)數(shù)組進(jìn)行判斷數(shù)組b各個(gè)數(shù)的數(shù)值為多少,0對應(yīng)"ling";1對應(yīng)"yi";2:對應(yīng)<"er";3對應(yīng)"san";4對應(yīng)"si";5對應(yīng)"wu";6對應(yīng)"liu";7對應(yīng)"qi";8對應(yīng)"ba";9對應(yīng)"jiu";#include<iostream>usingnamespacestd;intmain(){ chara[101]; cin>>a; intsum=0,i=0; while(a[i]!='\0') { sum+=a[i]-'0'; ++i; } if(sum==0) { cout<<"ling"<<endl; } intb[11],j=0; while(sum!=0) { b[j]=sum%10; sum=sum/10; ++j; } for(inti=j-1;i>=0;--i) { switch(b[i]) { case0:cout<<"ling";break; case1:cout<<"yi";break; case2:cout<<"er";break; case3:cout<<"san";break; case4:cout<<"si";break; case5:cout<<"wu";break; case6:cout<<"liu";break; case7:cout<<"qi";break; case8:cout<<"ba";break; case9:cout<<"jiu";break; } if(i!=0) cout<<""; } system("pause"); return0;}1003我要通過!

(20分)“答案正確”是自動(dòng)判題系統(tǒng)給出的最令人歡喜的回復(fù)。本題屬于PAT的“答案正確”大派送——只要讀入的字符串滿足下列條件,系統(tǒng)就輸出“答案正確”,否則輸出“答案錯(cuò)誤”。得到“答案正確”的條件是:字符串中必須僅有

P、

A、

T這三種字符,不可以包含其它字符;任意形如

xPATx

的字符串都可以獲得“答案正確”,其中

x

或者是空字符串,或者是僅由字母

A

組成的字符串;如果

aPbTc

是正確的,那么

aPbATca

也是正確的,其中

a、

b、

c

均或者是空字符串,或者是僅由字母

A

組成的字符串?,F(xiàn)在就請你為PAT寫一個(gè)自動(dòng)裁判程序,判定哪些字符串是可以獲得“答案正確”的。分析:首先判斷輸入的字符串必須僅有

P、

A、

T這三種字符;然后進(jìn)行這樣的判斷:PATp前面有0個(gè)A,pt之間有1個(gè)A,T后面有0個(gè)A,0*1=0正確PAATp前面有0個(gè)A,pt之間有2個(gè)A,T后面有0個(gè)A,0*2=0正確AAPATAAp前面有2個(gè)A,pt之間有1個(gè)A,T后面有2個(gè)A,2*1=2正確AAPAATAAAAp前面有2個(gè)A,pt之間有2個(gè)A,T后面有2個(gè)A,2*2=4正確#include<stdio.h>#include<iostream>#include<string.h>intmain(){charc[100];inti,j,n;intcount_P,count_A,count_T,pos_P,pos_T;scanf("%d\n",&n);for(i=0;i<n;i++){gets(c);count_P=0;count_A=0;count_T=0;pos_P=0;pos_T=0;for(j=0;j<strlen(c);j++){if(c[j]=='P'){count_P++;pos_P=j;}if(c[j]=='A')count_A++;if(c[j]=='T'){count_T++;pos_T=j;}}if(count_P+count_A+count_T!=strlen(c)||pos_T-pos_P<=1||count_P>1||count_T>1||pos_P*(pos_T-pos_P-1)!=strlen(c)-pos_T-1)printf("NO\n");elseprintf("YES\n");}return0;}1004

成績排名

(20分)讀入

n(>0)名學(xué)生的姓名、學(xué)號、成績,分別輸出成績最高和成績最低學(xué)生的姓名和學(xué)號。分析:首先我們需要輸入學(xué)生的姓名、學(xué)號、成績。把他們所有的成績作為一個(gè)整型數(shù)組,每個(gè)數(shù)與學(xué)生相對應(yīng),然后比較他們的成績,得到最高和最低成績。第i的成績最大或者最小,對應(yīng)第i個(gè)學(xué)生的信息。#include<stdio.h>#include<iostream>intmain(){inti,max=0,min=0,n,score[100];charname[100][8],id[100][8];scanf("%d",&n);for(i=0;i<n;i++){scanf("%s%s%d",name[i],id[i],&score[i]);}for(i=0;i<n;i++)if(score[i]>score[max])max=i;printf("%s%s\n",name[max],id[max]);for(i=0;i<n;i++)if(score[i]<score[min])min=i;printf("%s%s\n",name[min],id[min]);system("pause");return0;}1005

繼續(xù)(3n+1)猜想

(25分)卡拉茲(Callatz)猜想已經(jīng)在1001中給出了描述。在這個(gè)題目里,情況稍微有些復(fù)雜。當(dāng)我們驗(yàn)證卡拉茲猜想的時(shí)候,為了避免重復(fù)計(jì)算,可以記錄下遞推過程中遇到的每一個(gè)數(shù)。例如對

n=3

進(jìn)行驗(yàn)證的時(shí)候,我們需要計(jì)算3、5、8、4、2、1,則當(dāng)我們對

n=5、8、4、2進(jìn)行驗(yàn)證的時(shí)候,就可以直接判定卡拉茲猜想的真?zhèn)危恍枰貜?fù)計(jì)算,因?yàn)檫@4個(gè)數(shù)已經(jīng)在驗(yàn)證3的時(shí)候遇到過了,我們稱5、8、4、2是被3“覆蓋”的數(shù)。我們稱一個(gè)數(shù)列中的某個(gè)數(shù)

n

為“關(guān)鍵數(shù)”,如果

n

不能被數(shù)列中的其他數(shù)字所覆蓋?,F(xiàn)在給定一系列待驗(yàn)證的數(shù)字,我們只需要驗(yàn)證其中的幾個(gè)關(guān)鍵數(shù),就可以不必再重復(fù)驗(yàn)證余下的數(shù)字。你的任務(wù)就是找出這些關(guān)鍵數(shù)字,并按從大到小的順序輸出它們。分析:輸入n個(gè)數(shù),用數(shù)組a存放。首先把如果碰到數(shù)組中有0的項(xiàng),則跳過。判斷t,如果它是偶數(shù),那么把它砍掉一半;如果它是奇數(shù),那么把

(3n+1)

砍掉一半。然后進(jìn)行數(shù)組中所有數(shù)與運(yùn)算中出現(xiàn)的數(shù)比較,如果數(shù)組中有和運(yùn)算過程中相同的數(shù),就把數(shù)組中的該數(shù)改為0。因?yàn)檩斎氲臄?shù)組是互不相同的數(shù),所以不會存在有多個(gè)匹配的情況,為了節(jié)省內(nèi)存減少運(yùn)行時(shí)間,找到有一個(gè)匹配就可跳出。接著進(jìn)行排序,然后輸出。#include<stdio.h>#include<iostream>intmain(){inta[105];intn,i,t,j;scanf("%d",&n);for(i=0;i<n;i++) {scanf("%d",&a[i]);}for(i=0;i<n;i++){t=a[i];if(t==0)continue;while(t!=1){if(t%2==0)t/=2;elset=(3*t+1)/2;for(j=0;j<n;j++){if(a[j]==t){a[j]=0;break;}}}}inttemp;for(i=0;i<n;i++)for(j=i+1;j<n;j++){if(a[i]<a[j]){temp=a[i];a[i]=a[j];a[j]=temp;}}for(i=0;a[i]>0;i++) {printf("%d%s",a[i],a[i+1]>0?"":"");} system("pause");}1006

換個(gè)格式輸出整數(shù)

(15分)讓我們用字母

B

來表示“百”、字母

S

表示“十”,用

12...n

來表示不為零的個(gè)位數(shù)字

n(<10),換個(gè)格式來輸出任一個(gè)不超過3位的正整數(shù)。例如

234

應(yīng)該被輸出為

BBSSS1234,因?yàn)樗?個(gè)“百”、3個(gè)“十”、以及個(gè)位的4。分析:題目用字母

B

來表示“百”、字母

S

表示“十”,用

12...n

來表示不為零的個(gè)位數(shù)字

n(<10),整數(shù)n不超過三位數(shù)。首先求出整數(shù)n的百位a,十位b,個(gè)位c,在通過自減a,b,c(直到a,b,c不大于0)判斷每一位上有幾個(gè)數(shù)#include<iostream>usingnamespacestd;intmain(){ intn,a,b,c,i=1; cin>>n; c=n%100; n/=100; b=n%10; n/=10; a=n; while(a>0){ cout<<"B";a--; } while(b>0){ cout<<"S"; b--;} while(c>0) { cout<<i; i++; c--; } system("pause"); return0;}1007

素?cái)?shù)對猜想

(20分)分析:首先素?cái)?shù)是在大于1的自然數(shù)中,除了1和它本身以外不再有其他因數(shù)。那么可以從2開始找,求出1到N之間的素?cái)?shù);再判斷滿足條件的素?cái)?shù)對個(gè)數(shù):素?cái)?shù)對猜想”認(rèn)為“存在無窮多對相鄰且差為2的素?cái)?shù)。#include<iostream>#include<cmath>usingnamespacestd;intmain(){ intn; cin>>n; inti,j,count=0; ints=2; for(i=2;i<=n;i++) { for(j=2;j<=sqrt(i);j++) if(i%j==0) break; if(j>sqrt(i)) { if(i-s==2) count++; s=i; } } cout<<count; return0;}1008

數(shù)組元素循環(huán)右移問題

(20分)讓我們定義d?n??為:d?n??=p?n+1???p?n??,其中p?i??是第i個(gè)素?cái)?shù)。顯然有d?1??=1,且對于n>1有d?n??是偶數(shù)?!八?cái)?shù)對猜想”認(rèn)為“存在無窮多對相鄰且差為2的素?cái)?shù)”?,F(xiàn)給定任意正整數(shù)N(<10?5??),請計(jì)算不超過N的滿足猜想的素?cái)?shù)對的個(gè)數(shù)。分析:首先考慮到m可能會比n大,為了減少不必要的移動(dòng),將m對n取余;先將前0~n-m-1翻轉(zhuǎn),再將n-m~n-1翻轉(zhuǎn),最后再整體進(jìn)行數(shù)組的翻轉(zhuǎn)。#include<iostream>#include<stdio.h>usingnamespacestd;intmain(void){intn,m;cin>>n>>m; inta[300]; if(m>n) { m=m%n; }for(inti=0;i<n;i++){cin>>a[i];a[i+n]=a[i];}intj=n-m;for(inti=0;i<n;i++){if(i!=0){cout<<"";}cout<<a[j];j++;}cout<<endl; system("pause");return0;}1009

說反話

(20分)給定一句英語,要求你編寫程序,將句中所有單詞的順序顛倒輸出。分析:輸入

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論