在對銀行賬戶等重要許可權設定密碼的時候,我們常常遇到這樣的煩惱:
如果為了好記用生日吧,容易被破解,不安全;如果設定不好記的密碼,又擔心自己也會忘記;
如果寫在紙上,擔心紙張被別人發現或弄丟了…
這個程式的任務就是把一串拼音字母轉換為6位數字(密碼)。
我們可以使用任何好記的拼音串(比如名字,王喜明,就寫:wangximing)作為輸入,程式輸出6位數字。
變換的過程如下:
第一步. 把字串6個一組摺疊起來,
比如 wangximing
則變為:
wangxi
ming
第二步. 把所有垂直在同乙個位置的字元的ascii碼值相加,得出6個數字,如上面的例子,
則得出:
228 202 220 206 120 105
第三步. 再把每個數字「縮位」處理:
就是把每個位的數字相加,得出的數字如果不是一位數字,就再縮位,直到變成一位數字為止。
例如: 228 => 2+2+8=12 => 1+2=3
上面的數字縮位後變為:344836, 這就是程式最終的輸出結果!
要求程式從標準輸入接收資料,在標準輸出上輸出結果。
輸入格式為:第一行是乙個整數n(<100),表示下邊有多少輸入行,接下來是n行字串,就是等待變換的字串。
輸出格式為:n行變換後的6位密碼。
輸入:5
zhangfeng
wangximing
jiujingfazi
woaibeijingtiananmen
haohaoxuexi
則輸出:
772243
344836
297332
716652
875843
#include
#include
#include
intf
(int x)
x=sum;
}return x;
}int
main()
;gets
(a);
for(i=
0;i<=
strlen
(a)-
1;i++
) result[k]=f
(b[0])
*100000+f
(b[1])
*10000+f
(b[2])
*1000+f
(b[3])
*100+f
(b[4])
*10+f
(b[5])
*1;}
for(k=
0;k<=n-
1;k++
)printf
("%d\n"
,result[k]);
return0;
}
我發現沒什麼好吐槽的,思路非常重要,換誰保險也都得這麼做
需要注意的幾個點
for
(i=0
;i<=
strlen
(a)-
1;i++
)
可以幫助字串直接對位記錄
while
(x>=10)
x=sum;
}
取出各個位次相加,然後檢查是否又》10
result[k]=f
(b[0])
*100000+f
(b[1])
*10000+f
(b[2])
*1000+f
(b[3])
*100+f
(b[4])
*10+f
(b[5])
*1;
本來我覺得這個寫法很low,試了一波之後感覺真他媽香氣撲鼻
雞蛋裡找骨頭
for
(k=0
;k<=n-
1;k++
)printf
("%d\n"
,result[k]
);
可以直接輸出而不儲存陣列
蛋疼環節
memset(tmparr,0,sizeof tmparr);
因為長度的問題,我沒有清零時似乎出現已賦值的問題
1.分列儲存
2.按位相加
3.更新輸出
#include
#include
using
namespace std;
const
int len =6;
intcheck
(int x)
x=sum;
}return x;
}int
main()
return0;
}
w12選做 E做作業
馬上假期就要結束了,zjm還有 n 個作業,完成某個作業需要一定的時間,而且每個作業有乙個截止時間,若超過截止時間,一天就要扣一分。zjm想知道如何安排做作業,使得扣的分數最少。tips 如果開始做某個作業,就必須把這個作業做完了,才能做下乙個作業。輸入格式 有多組測試資料。第一行乙個整數表示測試資...
演算法 12 貪心
概念 所謂貪心演算法是指,在對問題求解時,總是做出在當前看來是最好的選擇。也就是說,不從整體最優上加以考慮,它所做出的僅僅是在某種意義上的區域性最優解。貪心演算法不是對所有問題都能得到整體最優解,選擇的貪心策略必須具備無後效性 即某個狀態以後的過程不會影響以前的狀態,只與當前狀態有關。所以,對所採用...
nefu 演算法課設 貪心
遞迴與分治 動態規劃 貪心演算法 回溯演算法 1 問題描述 設有n 個顧客同時等待一項服務。顧客i需要的服務時間為ti,1 i n 應如何安排n個顧客的服務次序才能使平均等待時間達到最小?平均等待時間是n 個顧客等待服務時間的總和除以n。2 程式設計任務 對於給定的n個顧客需要的服務時間,程式設計計...