題解啦啦啦~~

這大周呢,似乎好像沒有刷幾題哦。
所以,我要把歷經千辛萬苦做出的題目的思路、代碼都貼出來!!!.

一、線性三元組

題目描述:

解:其實,我看到這個題目覺得它特別難。等到做了之後,發現它比前面幾個題目都要簡單。就是三重循環,每重循環都枚舉s1,s2,s3。然後裏面要判斷s1-s2與s2-s3是否相等。而且要判斷s1,s2,s3是否互不相同。然後找到一個就把s累加。但是這樣找的會比答案多一倍,因爲每三個數都會找兩遍,所以枚舉完了還要把s除以二。
所以代碼如下:

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n,a[35],i,j,k,s=0;
    cin>>n;
    for (i=1;i<=n;i++) cin>>a[i];
    for (i=1;i<=n;i++)
      for (j=1;j<=n;j++)
        for (k=1;k<=n;k++)//枚舉
        {
            if ((i!=j)&&(j!=k)&&(a[i]-a[j]==a[j]-a[k]))//判斷
              s++;//累加
        }
    cout<<s/2<<endl;
    return 0;
}

因爲這道題的數據都比較小,所以用三重循環不會爆掉。

三、投票

題目描述:競選時,要求選民在n個候選人中選擇,n個人的名字爲 A,B,C,D……連續n個大寫字母,如果選擇n個人名字之外的人員,則爲廢票。 統計時以輸入’#’爲結束標記。請按候選人的得票數目從大到小順序輸出候選人的名字及得票情況。

輸入格式

第一行 n 爲候選人個數( n<=26,因爲候選人的名字全是1位大寫字母) 第二行爲一行大寫字母,最後一個字符爲’#’,每個大寫字母代表一張選票,選票個數<=2000.

輸出格式

n行,從選票個數從大到小輸出每個候選人的名字和票數。

解:
字符可以一個個的讀入,也可以用字符串讀入。在此我用的是一個個讀入字符。首先輸入的是候選人的數量。然後輸入的字符是投的票數。要記錄票數,可以開數組統計。我是開了一個結構體,p[i].ch是候選的名稱,p[i].s是候選人的票數。這題還有要注意的是要按票數從大到小輸出,如果票數一樣要按字典序輸出。所以在給結構體排序的時候就要寫一個布爾函數。
所以代碼如下:


#include<bits/stdc++.h>
using namespace std;
struct ps
{
    char ch;
    int s;
};
ps p[30];
bool mycmp(ps a,ps b)
{
    return ((a.s>b.s)||((a.s==b.s)&&(a.ch<b.ch)));
}
int main()
{
    int i,j,n,a[30]={};
    char c,sh='A';
    cin>>n;
    cin>>c;
    for (i=1;i<=30;i++) p[i].s=0;   
    for (i=1;i<=26;i++) p[i].ch=char(i+64);
    while (c!='#')
    {
        p[int(c-64)].s+=1;
        cin>>c;
    }
    sort(p+1,p+n+1,mycmp);
    for (i=1;i<=n;i++)
    {
        cout<<p[i].ch<<":"<<p[i].s<<endl;
    }
    return 0;
}
發佈了40 篇原創文章 · 獲贊 9 · 訪問量 5726
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章