首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

简略密码生成器(编程题)

2012-10-27 
简单密码生成器(编程题)题目描述:把一串拼音字母转换为6位数字(密码)。我们可以使用任何好记的拼音串(比如

简单密码生成器(编程题)

题目描述:把一串拼音字母转换为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位密码。

?

?

(这题本来是我参加的一个软件比赛的题(简略密码生成器(编程题)专科组),当时比赛的时候脑子一片发晕,最终还是没做完整,想想这还是学校出钱让我们参加的,结果自己不争气,估计是没希望了简略密码生成器(编程题),不甘心啊)

public class BaseTest { //给任意一个数,如果大于10,不断收缩,比如895->8+9+5=22->2+2=4,返回的结果应为4 public int getSingleNum(int target) { char[] chs = String.valueOf(target).toCharArray(); int value = 0; for (int i = 0; i < chs.length; i++) { int temp = Integer.parseInt(chs[i] + ""); value += temp; } if (value < 10) return value; else return getSingleNum(value); } //给定任意一个字符串,切成六段 public String[] cutStr(String target) { // 分成的段数 int cout = target.length() / 6 + 1; String[] strs = new String[cout]; int begain = 0, end = begain + 6; for (int i = 0; i < strs.length; i++) { if (end > target.length()) end = target.length(); strs[i] = target.substring(begain, end); begain = end; end = begain + 6; } return strs; } // 把每一段各列的ASCII码相加 public int[] getASCII(String[] strs) { // 最后一段长度可能不够六位 int len = strs[strs.length - 1].length(); if (len < 6) { char[] chs = strs[strs.length - 1].toCharArray(); char[] newchar = new char[6]; for (int i = 0; i < chs.length; i++) // 放入新char[]中 newchar[i] = chs[i]; // 后面空的填补'\0' for (int i = chs.length; i < 6; i++) newchar[i] = '\0'; // 替换末尾中旧的strs strs[strs.length - 1] = new String(newchar); } int a1 = 0, a2 = 0, a3 = 0, a4 = 0, a5 = 0, a6 = 0; for (int i = 0; i < strs.length; i++) { // 每一段的字符 char[] chs = strs[i].toCharArray(); // 各列的ASCII值相加 a1 += chs[0]; a2 += chs[1]; a3 += chs[2]; a4 += chs[3]; a5 += chs[4]; a6 += chs[5]; } int asciiValue[] = { a1, a2, a3, a4, a5, a6 }; return asciiValue; } // 最终密码生成,调用上面几个方法 public String generatePWD(String str) { String result = ""; String[] group = this.cutStr(str); int[] intgroup = this.getASCII(group); for (int i = 0; i < intgroup.length; i++) { int target = intgroup[i]; int value = this.getSingleNum(target); result += value; } return result; } public static void main(String[] args) { String vv=new BaseTest().generatePWD("hfdsafdsafdsaf");   System.out.println(vv); } }

?

热点排行