自测题IV——Have Fun with Numbers (20)

来源:互联网 发布:软件操作说明书模版 编辑:程序博客网 时间:2024/05/02 01:41
注意char与int的ASCII转换方法即可。
算法思路:
创建一个统计数组啊count[9][2]={{1,0},{2,0},.......},其中第一个下标存放数字,第二个下标存放对应数字出现的次数。
输入时,读取数字到string类型的num中,然后遍历num,每一个数字在统计数组里对应+1,得到num的统计数组。
二倍处理,注意进位。遍历,每一个数字在统计数组里对应-1,得到num的二倍对比数组。

如果此时count[i][1]均为0,则表明符合。

#include <iostream>#include <string>using namespace std;int main(){int count[9][2],n,tmp=0;//统计数组string num;cin >> num;//统计数组的初始化,将其分别设置为1-9,次数均为0for (int i = 0; i < 9; i++){count[i][0] = i + 1;count[i][1] = 0;}//每个数字出现的次数统计for (int i = 0; i < num.length(); i++)count[num[i] - 49][1]++;//减去49字节得到ASCII对应的数,减去49则对应count下标//数字的二倍处理for (int i = num.length() - 1;i>=0; i--){n = 2 * (num[i] - 48);if (n+tmp > 9)//大于9的情况{num[i] = n - 10+tmp+48;//tmp是进位变量,注意加上48tmp = 1;if (i == 0)//二倍数字位数大于num{count[0][1]--;//新的位为1num = "1" + num;}}else{num[i] = n+tmp+48;tmp = 0;}count[num[i] - 49][1]--;}for (n = 0; n < 9; n++)if (count[n][1] != 0)break;cout << (n == 9 ? "Yes" : "No")<<endl;cout << num;}


0 0
原创粉丝点击