求思路。1000以内的整数,用数字、大小写字母对应的ASCII码的数值的相加表示,怎么编程?

琴瑟起笙萧默 2019-05-15 08:30:00
0~9 的ascii码是48~57,A~Z的ascii码是65~90,a~z的ascii码是97~122。
一个整数,例如205,如果用上述的数字的相加来表示,则可以表示成HBC,其中H代表它ascii码的数值72,B代表66,C代表67。
编程实现下列功能:
接收一个1000(含)以内的正整数,然后输出一个可能的上述字母或数字的组合,这些字母或数字的对应代表的ascii码的数值相加能等于输入的这个正整数。
如果无法转换成字母和数字的组合,要输出“无法转换”。

请教大神,这个题目的思路应该是什么呢?求指教!

谢谢!
...全文
300 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Italink 2019-05-15
  • 打赏
  • 举报
回复

#include<iostream>
using namespace std;
const int MAX = 100;
int ch[MAX], len = 0;
int stk[MAX], top = 0;		//结果存到次数值里
void print() {		//输出结果
	for (int i = 0; i < top; i++)
		cout << (char)stk[i];
	cout << endl;
}
void search(int n) {
	if (n == 0)		//当n减到0,输出
		print();
	for (int i = 0; i < len; i++) {	//对每一种情况都进行考虑
		if (ch[i] <= n) {		//保证这个字符的ASCII比n小
			stk[top++] = ch[i];	//存进stk中
			search(n - ch[i]);
			top--;				//把stk末尾的值忽略
		}
	}
}
int main() {
	for (int i = '0'; i <= '9'; i++)		//初始化可选字符的数值
		ch[len++] = i;
	for (int i = 'a'; i <= 'z'; i++)
		ch[len++] = i;
	for (int i = 'A'; i <= 'Z'; i++)
		ch[len++] = i;
	int n;
	cin >> n;
	search(n);
	return 0;
}
Italink 2019-05-15
  • 打赏
  • 举报
回复
楼主的思路很好,不过这道题需要通过回溯(暴力搜索)算法解决,由于可能有一定难度,我直接贴代码 [code=c][/ #include<iostream> using namespace std; const int MAX = 100; int ch[MAX], len = 0; int stk[MAX], top = 0; //结果存到次数值里 void print() { //输出结果 for (int i = 0; i < top; i++) cout << (char)stk[i]; cout << endl; } void search(int n) { if (n == 0) //当n减到0,输出 print(); for (int i = 0; i < len; i++) { //对每一种情况都进行考虑 if (ch[i] <= n) { //保证这个字符的ASCII比n小 stk[top++] = ch[i]; //存进stk中 search(n - ch[i]); top--; //把stk末尾的值忽略 } } } int main() { for (int i = '0'; i <= '9'; i++) //初始化可选字符的数值 ch[len++] = i; for (int i = 'a'; i <= 'z'; i++) ch[len++] = i; for (int i = 'A'; i <= 'Z'; i++) ch[len++] = i; int n; cin >> n; search(n); return 0; } code]
琴瑟起笙萧默 2019-05-15
  • 打赏
  • 举报
回复
我的思路是:
1、创建一个62个元素的int数组,然后依次填入0~9,A~Z,a~z的对应的ascii码。
2、然后接收输入的数字,初步判断是不是1000以内正整数。
3、把输入的整数先减去最大的那个数字(就是:z,代表122)如果够减,则记录下,如果不够减,则减去y,依次从大到小依次减。

但是好像这么写的话,会出现个问题,比如136这个整数,减掉122后,剩下14,就不能转换成了。但是实际上它能转换成“0H”或者“1G”或者“2F”,然后就想不通要怎么处理了。。
不知道这个思路是不是有问题。

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧