2017年院赛D题 简单加密

来源:互联网 发布:linux tail命令 编辑:程序博客网 时间:2024/05/18 08:07

目录:

2017年院赛A题 Neptune'Pudding

2017年院赛B题 N个数求和

2017年院赛C题 treat

2017年院赛D题 简单加密

2017年院赛E题 守望者的逃离

2017年院赛F题 数独游戏

2017年院赛G题 忠诚

2017年院赛H题 最大异或和


题目:

简单加密

 

Description:

A和小B之间有数字信息来往,但是小A担心自己发送给小B的私密信息泄露被他人获取,于是他打算研究一个简单的加密方法只有自己和小B看得懂。小A给小B发送的信息保证都是1~9之间的数字,小A通过奇数位上的数字表示个数,对应的下一个偶数位的数字表示对应个数的数字来加密(比如:2635表示两个6连着35加密之后就是66555),如果最后一位是奇数位置结尾个数表示n,那么连着的加密串就是n*(比如263加密后就是66***)。

 

Input

第一行输入一个正整数T表示数据组数(T<=1000)

接下来T行每行输入一个字符串表示小A要发送给小B的信息(字符串长度不超过100

 

Output

对于每组数据输出一行小A信息加密之后的字符串

 

Sample Input

2

2635

263

 

Sample Ouput

66555

66***


标程:

#include <stdio.h>#include <string.h>using namespace std;int main(){int T ;char str[105] , ans[1005];scanf("%d" , &T);while(T--){scanf("%s" , str);int len = strlen(str);int pos = 0;for(int i=0 ; i<len ; i+=2){int cnt = str[i]-'0';char ch;if(i+1 >= len) ch='*';else ch=str[i+1];for(int j=0 ; j<cnt ; j++) ans[pos++] = ch;}ans[pos] = '\0';printf("%s\n" , ans);}return 0;}

我的代码:

#include<iostream>#include<string.h>using namespace std;int main(){char c[101];int t;cin>>t;while(t--){cin>>c;int k=0,l=strlen(c);while(k<=l-2){for(int i=0;i<c[k]-'0';i++)cout<<c[k+1];k+=2;}if(k==l-1)for(int i=0;i<c[k]-'0';i++)cout<<'*';cout<<endl;}return 0;}

0 0