描述
小红每次可以把一个字符变成两个字母表中比它小一位的字符。例如,可以把'b'变成两个'a',可以把'z'变成两个'y'。
小红希望最终可以生成 x 个'a',你能帮小红求出初始的字符串吗?请你输出长度最短的合法字符串,有多解时输出任意即可。输入描述:
一个正整数x,代表最终的'a'的数量。
1≤x≤1000输出描述:
一个字符串,代表小红操作前的字符串。如果有多个合法解,输出任意一个合法字符串即可。但需要保证输出的是最短字符串。
示例1
输入:
5输出:
ca说明:
"ca"->"bba"->"aaaaa"
输出ac也是可以的
一、问题分析
首先读题,仔细看描述中的内容,发现需求是
1.两个'a'可以变成一个'b',两个'b'可以变成一个'c'......
2.求问给定一个正整数x,代表a的数量,能变成的最短字符串
二、解题思路
1.假定a为0,b为1...
2.将x对2求余,如果得1,证明有a,将a加入结果字符串
3.如果得0,则有x/2个b(x大于0)
4.再接着x/2得结果对2求余如果得1,证明有b,将b加入结果字符串
....
5.2的10次方是1024,最多到j所以不用担心字母不够
三、具体步骤
使用的语言是C
#include <stdio.h>
#include <stdlib.h>
int main() {int x;if (scanf("%d", &x) != EOF) {int charnum = 0;char* answer = (char*)malloc(sizeof(char) * x);int answerIdx = 0;while(x != 0) {if(x % 2 == 1) {x--;answer[answerIdx] = charnum + 'a';answerIdx++;} else {x /= 2;charnum++;}}printf("%s\n", answer);} else {printf("no input\n");}return 0;
}