P1603 斯诺登的密码(字符串 排序)

mac2024-01-27  35

题的链接:P1603 斯诺登的密码

题解: 先将题目的数字字符串保存,再将数字字符串对应的数字的平方后对100取余的结果一一对应的保存到int型数组;然后在输入的时候去判断是不是出现了数字,出现了数字则将数字存到另一个数组,然后将其排序,从小到大;最后输出,输出最小的一个数,即直接将排好序的全部输出即可;
细节:
第一位不能是0,是0的直接跳过;后面的如果是一位数,要有前导0,eg: 09;可以用printf("%02d",a),解决;如果没有数字,则直接输出0,可以用flag做标记判断。
参考代码:
#include <iostream> #include <algorithm> using namespace std; string str[30] = {"zero","one","two","three","four","five","six","seven", "eight","nine","ten","eleven","twelve","thirteen","fourteen", "fifteen","sixteen","seventeen","eighteen","nineteen","twenty", "a","both","another","first","second","third"}; int W[30] = {0,1,4,9,16,25,36,49,64,81,00,21,44,69,96,25,56,89,24,61,0,1,4, 1,1,4,9}; string s; int D[30], j; int main() { while(cin >> s && s != ".") { for(int i = 0; i <= 26; i++) { if(str[i] == s) { D[j++] = W[i]; break; } } } sort(D, D + j); int flag = 1; for(int i = 0; i < j; i++) { if(flag) { //第一位输出不为0的数 if(D[i]) cout << D[i], flag = 0; }//后序位如果是个位数要补零,即占够两位 else printf("%02d",D[i]); }//若没有数字,则直接输出0 if(flag) cout << 0; return 0; }
最新回复(0)