Java实现数字密码发生器
在對銀行賬戶等重要權(quán)限設(shè)置密碼的時候,我們常常遇到這樣的煩惱:如果為了好記用生日吧,容易被破解,不安全;如果設(shè)置不好記的密碼,又擔心自己也會忘記;如果寫在紙上,擔心紙張被別人發(fā)現(xiàn)或弄丟了…
這個程序的任務(wù)就是把一串拼音字母轉(zhuǎn)換為6位數(shù)字(密碼)。我們可以使用任何好記的拼音串(比如名字,王喜明,就寫:wangximing)作為輸入,程序輸出6位數(shù)字。
變換的過程如下:
第一步. 把字符串6個一組折疊起來,比如wangximing則變?yōu)?#xff1a;
wangxi
ming
第二步. 把所有垂直在同一個位置的字符的ascii碼值相加,得出6個數(shù)字,如上面的例子,則得出:
228 202 220 206 120 105
第三步. 再把每個數(shù)字“縮位”處理:就是把每個位的數(shù)字相加,得出的數(shù)字如果不是一位數(shù)字,就再縮位,直到變成一位數(shù)字為止。例如: 228 => 2+2+8=12 => 1+2=3
上面的數(shù)字縮位后變?yōu)?#xff1a;344836, 這就是程序最終的輸出結(jié)果!
要求程序從標準輸入接收數(shù)據(jù),在標準輸出上輸出結(jié)果。
輸入格式為:第一行是一個整數(shù)n(<100),表示下邊有多少輸入行,接下來是n行字符串,就是等待變換的字符串。
輸出格式為:n行變換后的6位密碼。
例如,輸入:
5
zhangfeng
wangximing
jiujingfazi
woaibeijingtiananmen
haohaoxuexi
則輸出:
772243
344836
297332
716652
875843
注意:
請仔細調(diào)試!您的程序只有能運行出正確結(jié)果的時候才有機會得分!
在評卷時使用的輸入數(shù)據(jù)與試卷中給出的實例數(shù)據(jù)可能是不同的。
import java.util.ArrayList; import java.util.Scanner;public class Main {public static ArrayList<String> list = new ArrayList<String>();public String getResult(String s) {int[] A = new int[6];for(int i = 0;i < s.length();i++)A[i % 6] = A[i % 6] + s.charAt(i);for(int i = 0;i < 6;i++) {while(A[i] >= 10) {String temp = "" + A[i];int a = 0;for(int j = 0;j < temp.length();j++)a = a + (temp.charAt(j) - '0');A[i] = a;}}StringBuffer t = new StringBuffer("");for(int i = 0;i < 6;i++)t.append(A[i]);return t.toString();}public static void main(String[] args) {Main test = new Main();Scanner in = new Scanner(System.in);int n = in.nextInt();for(int i = 0;i < n;i++) {String s = in.next();list.add(test.getResult(s));}for(int i = 0;i < n;i++)System.out.println(list.get(i));} }總結(jié)
以上是生活随笔為你收集整理的Java实现数字密码发生器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Unity3D插件之FingerGest
- 下一篇: java美元兑换,(Java实现) 美元