【Description】
為了迎接圣誕,資訊學興趣小組的同學們在輔導老師的帶領下,舉辦了一個盛大的晚會,晚會的第一項內容是做游戲:猜數,老師給每位同學發一張卡片,每張卡片上都有一個編號(此編號為非負數,且小于255),每個編號互不相同,老師制定了以下的游戲規則:
第一輪,每位同學將自己卡片上編號的各位數字進行平方后再相加得到一組新數,編號在這組新數中出現的同學淘汰出局;
第二輪,余下的同學再將編號的各位數字進行立方相加得到一組新數,編號在這組新數中出現的同學再淘汰出局;
第三輪,余下的同學再將編號的各位數字進行4次方相加得到一組新數,編號在這組新數中出現的同學再淘汰出局,依此類推,經過n輪后,仍留下來的同學,將獲得圣誕特別禮物,卡片上的數即是2008年吉祥數,(假定班級人數不超過200人)
【Input】
輸入檔案第一行為一個整數n(1<=n<8),表示有n輪游戲,一個整數m(1<=m<=200),表示班級學生人數,
第二行是卡片上互不相同的編號,每兩個編號間有一個空格,
【Output】
輸出檔案只有一行,為剩下來的各個吉祥數,按從小到大順序輸出,每兩個數之間有一個空格,
【Sample Input】
1 10
24 123 2 12 20 14 4 6 36 72
【Sample Output】
2 6 12 24 72 123
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,m,a[201],b[201],x,ge,s,power;//a陣列存放卡片編號
cin>>n>>m;//n為游戲輪數 m為班級學生人數
for(int i=1;i<=m;i++)
{
cin>>a[i];
}
for(int i=1;i<=n;i++)//回圈變數i代表游戲進行到第幾輪
{
for(int j=1;j<=m;j++)
{
x=a[j];s=0;//原數字分割前 s求和需清零
while(x!=0)
{
ge=x%10;//取個位
x=x/10;//去個位
power=1;//重新計算各個位上的次方要清1
for(int t=1;t<=i+1;t++)//注意:回圈變數t的上限取決于第幾輪游戲
{
power=power*ge;//計算各個位上的次方
}
s=s+power;//加總各個位上的次方
}
b[j]=s;//將新一輪的得到的新數字存進b陣列里
}
for(int i=1;i<=m;i++)
{
for(int j=1;j<=m;j++)
{
if(a[i]==b[j])
{
a[i]=0;//如果新數與原數字相同 原陣列里的數字賦值零表示淘汰
}
}
}
}
sort(a+1,a+m+1);//從小到大 快排
for(int i=1;i<=m;i++)
{
if(a[i]!=0) cout<<a[i]<<" "; //除了0以外的數字均輸出
}
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/382978.html
標籤:其他
