好记的拼音串

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.Scanner;

/*
好记的拼音串(比如名字,王喜明,就写:wangximing)作为输入,程序输出他6位数字。
密码生成规则:
1. 把字符串6个一组折叠起来,比如wangximing则变为:
wangxi
ming
2. 把所有垂直在同一个位置的字符的ascii码值相加,得出6个数字,如上面的例子,则得出:
228 202 220 206 120 105
3. 再把每个数字“缩位”处理:就是把每个位的数字相加,得出的数字如果不是一位数字,就再缩位,直到变成一位数字为止。例如: 228 => 2+2+8=12 => 1+2=3
上面的数字缩位后变为:344836, 这就是程序最终的输出结果!
输入要求:
输入的第一行是一个整数n(n<100),表示下边有多少输入行,接下来是n行长度不超过100的字符串S,就是等待变换的字符串。
输出要求:
输出n行变换后的6位密码。

样例:
输入:
5
zhangfeng
wangximing
jiujingfazi
woaibeijingtiananmen
haohaoxuexi
输出:
772243
344836
297332
716652
875843
*/
public class EasyRemeberString {

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int n =Integer.valueOf(scanner.nextLine());
		List<String> names = new ArrayList<>(n);
		for (int i = 0; i < n; i++) {
			String name = scanner.nextLine();
			if (name.length() > 0) {
				names.add(name);
			}
		}
		encode(names, 6);
		scanner.close();
	}

	public static void encode(List<String> names, int len) {
		for (String name : names) {
			int length = name.length();
			int N = length / len;
			int M = length % len;
			int K = N;
			if (M > 0) {
				K = N + 1;
				name = constructString(name, len - M);
			}
			String[] tranSname = new String[K];
			int i = 0;
			for (; i < K; i++) {
				tranSname[i] = name.substring(i * len, (1 + i) * len);
			}
			int[] arr = new int[len];
			String result = "";
			for (int j = 0; j < len; j++) {
				int sum = 0;
				for (int k = 0; k < K; k++) {
					char c = tranSname[k].charAt(j);
					if (c != '#') {
						sum += c;
					}
				}
				arr[j] = sum;
				int m = shortNumber(sum);
				result += m;
			}
			System.out.println(result);
		}
	}

	//补全
	public static String constructString(String name, int n) {
		StringBuilder stringBuilder = new StringBuilder(name);
		for (int i = 0; i < n; i++) {
			stringBuilder.append("#");
		}
		return stringBuilder.toString();
	}
	//缩位输出
	public static int shortNumber(int k) {
		String str = String.valueOf(k);
		while (str.length() != 1) {
			int n = 0;
			for (int i = 0; i < str.length(); i++) {
				n += str.charAt(i) - '0';
			}
			str = String.valueOf(n);
		}
		return Integer.valueOf(str);
	}
}

全部评论

相关推荐

野猪不是猪🐗:这种直接口头上答应,骗面试,面完了直接拉黑,相当于给自己攒面经了(
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务