用Java写一个程序:使其输出从A-Z的排序字母
要求:给定一个数(如intcount=k),k是个可变量(可以是任意大于0的int值,如k=1237),写一个for(inti=1;i<count;i++)循环,在循环里...
要求:给定一个数(如int count = k),k是个可变量(可以是任意大于0的int值,如k = 1237),写一个for(int i=1;i<count;i++)循环,在循环里当i = 1,则输出String name = "AA",i=2,则name = "AB"……,i=26,name="AZ",i=27,name="BA"(这里name.length>=2,不足的以A补足),如此类推一直到i=count。这里假设如果到i=count时输出的是name="BFN",则前面当i = 1时,也应当则输出name = "AAA"(就是说输入的位数要相等,不足的以A补足)。
如果给出好的代码的话再附加50赏分,能运行得到想要的结果并被采纳的至少也加30赏分。 展开
如果给出好的代码的话再附加50赏分,能运行得到想要的结果并被采纳的至少也加30赏分。 展开
3个回答
展开全部
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
int count;
Scanner scan = new Scanner(System.in);
count = scan.nextInt();
// max[0]: 记录只有1位(A ... Z)时,count的最大值。
// max[1]:记录只有2位(AA ... ZZ)时,count的最大值。
// max[2]: 记录只有3位(AAA, AAB, ..., ZZZ)时,count的最大值。
int max[] = new int[7];
max[0] = 26;
for (int i = 1; i < max.length; i++) {
max[i] = max[i - 1] * 26 + 26;
System.out.println(max[i]);
}
//Count最大只能为最大的int
max[6] = Integer.MAX_VALUE;
int len = 0; //记录针对当前输入的count, 所需名字串的位数
for (int i = 0; i < max.length; i++) {
if (max[i] >= count) {
len = i + 1;
break;
}
}
char str[] = new char[8];
for (int i = 0; i < len; i++)
str[i] = 'A';
str[len] = '\0';
StringBuilder sb = new StringBuilder(10);
if (count >= 1) {
//打印第一个名字
for (int j = 0; j < len; j++)
System.out.print(str[j]);
System.out.println();
for (int i = 2; i <= count; i++) {
int j = len - 1;
while (j >= 0) {
if (str[j] != 'Z') { //当前位不是Z直接加1,跳出循环
str[j] += 1;
break;
} else { //当前位是Z,将其设置为A,并向高位进1
str[j] = 'A';
j--;
}
}
//将需要输出的名字成字符串
sb.setLength(0);
for (j = 0; j < len; j++) {
sb.append(str[j]);
}
System.out.println(sb.toString());
}
}
}
}
public class Test {
public static void main(String[] args) {
int count;
Scanner scan = new Scanner(System.in);
count = scan.nextInt();
// max[0]: 记录只有1位(A ... Z)时,count的最大值。
// max[1]:记录只有2位(AA ... ZZ)时,count的最大值。
// max[2]: 记录只有3位(AAA, AAB, ..., ZZZ)时,count的最大值。
int max[] = new int[7];
max[0] = 26;
for (int i = 1; i < max.length; i++) {
max[i] = max[i - 1] * 26 + 26;
System.out.println(max[i]);
}
//Count最大只能为最大的int
max[6] = Integer.MAX_VALUE;
int len = 0; //记录针对当前输入的count, 所需名字串的位数
for (int i = 0; i < max.length; i++) {
if (max[i] >= count) {
len = i + 1;
break;
}
}
char str[] = new char[8];
for (int i = 0; i < len; i++)
str[i] = 'A';
str[len] = '\0';
StringBuilder sb = new StringBuilder(10);
if (count >= 1) {
//打印第一个名字
for (int j = 0; j < len; j++)
System.out.print(str[j]);
System.out.println();
for (int i = 2; i <= count; i++) {
int j = len - 1;
while (j >= 0) {
if (str[j] != 'Z') { //当前位不是Z直接加1,跳出循环
str[j] += 1;
break;
} else { //当前位是Z,将其设置为A,并向高位进1
str[j] = 'A';
j--;
}
}
//将需要输出的名字成字符串
sb.setLength(0);
for (j = 0; j < len; j++) {
sb.append(str[j]);
}
System.out.println(sb.toString());
}
}
}
}
更多追问追答
追问
当输入677时就不对了。
追答
max[i] = max[i - 1] * 26; //将这一句改 一下就对了。
计算max数组的时候写错了。
另外,我还优化了一下,增加了对输出的缓存,可以大大的提高速度,刚测试了一下,1000万的输入也就4秒钟时间。
展开全部
你好,按照你的要求写的如下代码,精短而高效,可以直接运行
public class Luck {
public static void main(String[] args) {
int count = 1237;//count,手动指定范围
// 确定字符串的长度
int length = 1;
int temp = count;
while ((temp = temp / 26) > 0) {
length++;
}
// 从1输出到count
for (int a = 1; a <= count; a++) {
int i = a - 1;
String s = "";
while (i > 0) {
s = (char) ('A' + i % 26) + s;
i = (i - i % 26) / 26;
}
while (s.length() < length) {
s = 'A' + s;
}
System.out.println(s);
}
}
}
public class Luck {
public static void main(String[] args) {
int count = 1237;//count,手动指定范围
// 确定字符串的长度
int length = 1;
int temp = count;
while ((temp = temp / 26) > 0) {
length++;
}
// 从1输出到count
for (int a = 1; a <= count; a++) {
int i = a - 1;
String s = "";
while (i > 0) {
s = (char) ('A' + i % 26) + s;
i = (i - i % 26) / 26;
}
while (s.length() < length) {
s = 'A' + s;
}
System.out.println(s);
}
}
}
更多追问追答
追问
当输入count "BAA"。
追答
你好,代码修改成功,请试试
public class Luck {
public static void main(String[] args) {
int count = 677;// count,手动指定范围
// 确定字符串的长度
int length = 0;
int temp = count - 1;
while (temp > 0) {
temp = (temp - temp % 26) / 26;
length++;
}
temp = Math.max(temp, 2);// 保证输出的最小长度
// 从1输出到count
for (int a = 1; a 0) {
s = (char) ('A' + i % 26) + s;
i = (i - i % 26) / 26;
}
while (s.length() < length) {
s = 'A' + s;
}
System.out.println(s);
}
}
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
按你的要求,如下:可百度Hi我,good luck!
import java.util.Scanner;
public class Test {
/**
*
* @Title: toAlphabet
* @Description: 得出数字代表的字符串(字符串)
* @param @param num - 输入数字
* @param @return
* @return String
* @throws
*/
public static String toAlphabet(int num) {
char[] chs = new char[7];
int offset = chs.length;
while(num > 0) {
int m = num % 26;
num /= 26;
if(m == 0) {
m = 26;
num--;
}
chs[--offset] = (char)(m + 'A' - 1);
}
return new String(chs, offset, chs.length - offset);
}
/**
*
* @Title: toComplement
* @Description: 补全字符串
* @param @param str - 原始字符串
* @param @param digits - 补全位数
* @param @param c - 补的字符
* @param @param bl - true补前面
* false补后面
* @param @return
* @return String
* @throws
*/
public static String toComplement(String str, int digits, char c, boolean bl) {
int size = str.length();
String dc_str = "";
//算出位数,补全差位
while(size < digits) {
dc_str += c;
size++;
}
//补全字符串
if(bl)
str = dc_str + str;
else
str = str +dc_str;
return str;
}
public static void main(String[] args) {
int count ;
Scanner scan = new Scanner(System.in);
count = scan.nextInt();
//获得
int digits = toAlphabet(count).length();
//按你要求写如下for的话,count=1的时候不会进入循环,可以改成i<=count
for(int i=1; i<count; i++) {
System.out.println(toComplement(toAlphabet(i), digits, 'A', false));
}
}
}
import java.util.Scanner;
public class Test {
/**
*
* @Title: toAlphabet
* @Description: 得出数字代表的字符串(字符串)
* @param @param num - 输入数字
* @param @return
* @return String
* @throws
*/
public static String toAlphabet(int num) {
char[] chs = new char[7];
int offset = chs.length;
while(num > 0) {
int m = num % 26;
num /= 26;
if(m == 0) {
m = 26;
num--;
}
chs[--offset] = (char)(m + 'A' - 1);
}
return new String(chs, offset, chs.length - offset);
}
/**
*
* @Title: toComplement
* @Description: 补全字符串
* @param @param str - 原始字符串
* @param @param digits - 补全位数
* @param @param c - 补的字符
* @param @param bl - true补前面
* false补后面
* @param @return
* @return String
* @throws
*/
public static String toComplement(String str, int digits, char c, boolean bl) {
int size = str.length();
String dc_str = "";
//算出位数,补全差位
while(size < digits) {
dc_str += c;
size++;
}
//补全字符串
if(bl)
str = dc_str + str;
else
str = str +dc_str;
return str;
}
public static void main(String[] args) {
int count ;
Scanner scan = new Scanner(System.in);
count = scan.nextInt();
//获得
int digits = toAlphabet(count).length();
//按你要求写如下for的话,count=1的时候不会进入循环,可以改成i<=count
for(int i=1; i<count; i++) {
System.out.println(toComplement(toAlphabet(i), digits, 'A', false));
}
}
}
追问
当输入26时只输出了"A"—>"Y","Z"呢??别外当输入count "BAA"。
追答
类全贴超百度限制了,你自己将下面改动的toAlphabet、main方法替换下就可以了!~
①输入26 A-Y 是因为当为1时循环没执行,改为i 0) {
int m = num % 26;
num /= 26;
if(m == 0) {
m = 26;
num--;
}
chs[--offset] = (char)(m + 'A' - 1);
}
return new String(chs, offset, chs.length - offset);
}
③最少输出2位,只需需该main方法加一个判断,即digits小于2时,digits=2。如下:
public static void main(String[] args) {
int count ;
Scanner scan = new Scanner(System.in);
count = scan.nextInt();
//获得
int digits = toAlphabet(count).length();
//这个if用于设置最低2位
if(digits<2)
digits = 2;
//按你要求写如下for的话,count=1的时候不会进入循环,可以改成i<=count
for(int i=1; i<=count; i++) {
System.out.println(toComplement(toAlphabet(i), digits, 'A', false));
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询