這大周呢,似乎好像沒有刷幾題哦。
所以,我要把歷經千辛萬苦做出的題目的思路、代碼都貼出來!!!.
一、線性三元組
題目描述:
解:其實,我看到這個題目覺得它特別難。等到做了之後,發現它比前面幾個題目都要簡單。就是三重循環,每重循環都枚舉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;
}