《算法筆記》之入門模擬

1.PAT B1001:害死人不償命的(3n+1)猜測html

卡拉茲(Callatz)猜測:ios

對任何一個正整數 n,若是它是偶數,那麼把它砍掉一半;若是它是奇數,那麼把 ( 砍掉一半。這樣一直反覆砍下去,最後必定在某一步獲得 n=1。卡拉茲在 1950 年的世界數學家大會上公佈了這個猜測,傳說當時耶魯大學師生齊動員,拼命想證實這個貌似很傻很天真的命題,結果鬧得學生們無意學業,一心只證 (,以致於有人說這是一個陰謀,卡拉茲是在蓄意延緩美國數學界教學與科研的進展……編程

咱們今天的題目不是證實卡拉茲猜測,而是對給定的任一不超過 1000 的正整數 n,簡單地數一下,須要多少步(砍幾下)才能獲得 n=1?數組

 輸入樣例:3
學習

 輸出樣例:5
 
解析:
採用語言:C++(由於C++的輸入與輸出十分簡便)
思想:使用while循環直至n=1爲止,同時定義一個哨兵,每當while循環一次則將哨兵多加一次,最終輸入出哨兵的值
#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:挖掘機技術哪家強spa

爲了用事實說明挖掘機技術到底哪家強,PAT 組織了一場挖掘機技能大賽。現請你根據比賽結果統計出技術最強的那個學校。code

輸入格式htm

輸入在第 1 行給出不超過 1 的正整數 N,即參賽人數。隨後 N 行,每行給出一位參賽者的信息和成績,包括其所表明的學校的編號(從 1 開始連續編號)、及其比賽成績(百分制),中間以空格分隔。blog

輸出格式:ip

在一行中給出總得分最高的學校的編號、及其總分,中間以空格分隔。題目保證答案惟一,沒有並列。

輸入樣例:

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;
}
相關文章
相關標籤/搜索