1.PAT B1001:害死人不償命的(3n+1)猜想
卡拉茲(Callatz)猜想:
對任何一個正整數 n,如果它是偶數,那么把它砍掉一半;如果它是奇數,那么把 ( 砍掉一半,這樣一直反復砍下去,最后一定在某一步得到 n=1,卡拉茲在 1950 年的世界數學家大會上公布了這個猜想,傳說當時耶魯大學師生齊動員,拼命想證明這個貌似很傻很天真的命題,結果鬧得學生們無心學業,一心只證 (,以至于有人說這是一個陰謀,卡拉茲是在蓄意延緩美國數學界教學與科研的進展……
我們今天的題目不是證明卡拉茲猜想,而是對給定的任一不超過 1000 的正整數 n,簡單地數一下,需要多少步(砍幾下)才能得到 n=1?
輸入樣例:3
#include<iostream> using namespace std; int main(){ int n;//定義正整數n int count=0;//定義哨兵 cin>>n;//C++輸入流,輸入n的值 while(n!=1){//while回圈體記憶體放終止條件 if(n%2==0) n=n/2;//偶數則除2 else n=(3*n+1)/2;//奇數則乘3加1再除2 count++; } cout<<count;//輸出流輸出 }
2.PAT B1032:挖掘機技術哪家強
為了用事實說明挖掘機技術到底哪家強,PAT 組織了一場挖掘機技能大賽,現請你根據比賽結果統計出技術最強的那個學校,
輸入格式:
輸入在第 1 行給出不超過 1 的正整數 N,即參賽人數,隨后 N 行,每行給出一位參賽者的資訊和成績,包括其所代表的學校的編號(從 1 開始連續編號)、及其比賽成績(百分制),中間以空格分隔,
輸出格式:
在一行中給出總得分最高的學校的編號、及其總分,中間以空格分隔,題目保證答案唯一,沒有并列,
輸入樣例:
6 3 65 2 80 1 100 2 70 3 40 3 0
決議:
首先需要使用cin標準輸入流輸入挖掘機總數n,將其存放在一個陣列里,需要注意的是【包括其所代表的學校的編號(從 1 開始連續編號)】,說明對該陣列進行初始化需要從1開始至n,因此該陣列應該設為n+1個,之后進行for回圈,進行一次次的回圈,同時在回圈內進行cin輸入,在進行輸入的同時,進行查找其中的最大值,對于每一個學校的分值應當相加——>【學校:陣列下標;學校分值:陣列的值】,
如何查找最大值呢?有好幾種方法均可以得到,講最簡單的,開始設定一個max=0并且假設是最大的,然后在for回圈里依次進行比較,如果陣列值比max的值大,則記錄下該值的下標并且將其賦值給max以確保max最終為最大的值,最終得到的下標就是學校,得到的max值就是學校成績,
# include<iostream> # include<algorithm> # include<stdio.h> # include<string> using namespace std; int main(){ int n,h,cj,max=0,maxh; cin>>n; int a[n+1]; for(int i=1;i<=n;i++){ a[i]=0; } for(int j=1;j<=n;j++){ cin>>h>>cj; a[h]=a[h]+cj; if(max<a[h]){ max=a[h]; maxh=h; } } cout<<maxh<<" "<<max; return 0; }
3.PAT B1036:跟奧巴馬一起編程
美國總統奧巴馬不僅呼吁所有人都學習編程,甚至以身作則撰寫代碼,成為美國歷史上首位撰寫計算機代碼的總統,2014 年底,為慶祝“計算機科學教育周”正式啟動,奧巴馬撰寫了很簡單的計算機代碼:在螢屏上畫一個正方形,現在你也跟他一起畫吧!
輸入格式:
輸入在一行中給出正方形邊長 N(3)和組成正方形邊的某種字符 C,間隔一個空格,
輸出格式:
輸出由給定字符 C 畫出的正方形,但是注意到行間距比列間距大,所以為了讓結果看上去更像正方形,我們輸出的行數實際上是列數的 50%(四舍五入取整),
輸入樣例:
10 a
輸出樣例:
aaaaaaaaaa
a a
a a
a a
aaaaaaaaaa
決議:四舍五入,本質上即為(n+1)/ 2:
若n為偶數則(n+1)/ 2根據除法運算可知(n+1)/ 2 = n / 2
若n為奇數數則為(n+1)/ 2
輸出的時候第一行與最后一行全部輸出,對于第2~n-1行的時候首尾輸入一個a,中間輸入空格,使用雙層for回圈解決
#include <iostream> using namespace std; int main() { int N; char c; cin>>N>>c; for(int i = 0; i < (N + 1) / 2; i++)//四舍五入的本質 { for(int j = 0; j < N; j++) { if(i == 0 || i == (N - 1) / 2 || j == 0 || j == N - 1)//i==0和i==(n-1)/2代表第一行和最后一行全部輸出字符 cout<<c; //其余的只有該行的第一個和最后一個需要輸出字符 else cout<<' '; } cout<<endl;//換行 } return 0; }
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/110908.html
標籤:其他
