使用密钥来编码消息的算法,综合运用C语言的程序设计的代码的方式怎么做这个编码

Problem Description
IBM has decided that all messages sent to and from teams competing in the ACM programming contest should be encoded. They have decided that instead of sending the letters of a message, they will transmit their remainders relative to some secret keys which are four, two-digit integers that are pairwise relatively prime. For example, consider the message "THE CAT IN THE HAT". The letters of this message are first converted into numeric equivalents, where A=01, B=02, ..., Z=26 and a blank=27. Each group of 3 letters is then combined to create a 6 digit number. (If the last group does not contain 3 letters it is padded on the right with blanks and then transformed into a 6 digit number.) For example
THE CAT IN THE HAT → 200805 270301 202709 142720 080527 080120
Each six-digit integer is then encoded by replacing it with the remainders modulo the secret keys as follows: Each remainder should be padded with leading 0’s, if necessary, to make it two digits long. After this, the remainders are concatenated together and then any leading 0’s are removed. For example, if the secret keys are 34, 81, 65, and 43, then the first integer 200805 would have remainders 1, 6, 20 and 38. Following the rules above, these combine to get the encoding 1062038. The entire sample message above would be encoded as
1062038 1043103 1473907 22794503 15135731 16114011

Input
The input consists of multiple test cases. The first line of input consists of a single positive integer n indicating the number of test cases. The next 2n lines of the input consist of the test cases. The first line of each test case contains a positive integer (< 50) giving the number of groups in the encoded message. The second line of each test case consists of the four keys followed by the encoded message.
Each message group is separated with a space.

Output
For each test case write the decoded message. You should not print any trailing blanks.

Sample Input
2
6
34 81 65 43 1062038 1043103 1473907 22794503 15135731 16114011
3
20 31 53 39 5184133 14080210 7090922

Sample Output
THE CAT IN THE HAT
THE END

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
hdb3编码的C语言编码
此编码为hdb3编码用C语言实现的编码部分,实现原码到hdb3码的转换。
c语言代码和汇编码
c语言的代码通过编译器是不是应该直接编译成机器码?rnrn那听到有人说,比较两段c代码性能的时候,看一下c代码对应的汇编码?难倒c编译器编译后的是汇编码?还是有其他的工具。rnrn谢谢大家?
编码算法 编码算法 编码算法
这是图形学中的编码算法,希望对大家有帮助!
这个是什么方式的编码?
rn38²¿ÃÅÈËÔ±×÷Òµ¼Æ»®Íê³ÉÇé¿ö¼ì²é(Ä£ÐÍ).xlsrn这个是什么方式的编码?我想变成类似\"=?gb18030?Q?=BB=D8__=D6=B4=2Edoc?=\"这种编码,如何做?
huffman 编码 c语言
huffman 编码 c语言 有很详细的注释,很不错的,有需要的不枉下
C语言PUD编码
虽然使用的是VC 6.0编写的程序,但是已经测试过,在底层c中也可以实现PDU编码。短信猫中经常用到,主要是一个宽字符串的转换。
C语言香浓编码
c语言读取一个文档,统计出字符出现的次数,概率,并使用哈弗曼编码对文章编码。
C语言编码哈夫曼树
#include<iostream> #include<fstream> #include<iomanip> #include<stdlib.h> using namespace std; # define MaxN 100//初始设定的最大结点数 # define MaxC 1000//最大编码长度 # define ImpossibleWeight 10000//结点不可能达到的权值 # define n 26//字符集的个数 //-----------哈夫曼树的结点结构类型定义----------- typedef struct //定义哈夫曼树各结点 { int weight;//权值 int parent;//双亲结点下标 int lchild;//左孩子结点下标 int rchild;//右孩子结点下标 }HTNode,*HuffmanTree;//动态分配数组存储哈夫曼树 typedef char**HuffmanCode;//动态分配数组存储哈夫曼编码表 //-------全局变量-------- HuffmanTree HT; HuffmanCode HC; int *w;//权值数组 //const int n=26;//字符集的个数 char *info;//字符值数组 int flag=0;//初始化标记 //********************************************************************** //初始化函数 //函数功能: 从终端读入字符集大小n , 以及n个字符和n个权值,建立哈夫曼树,并将它存于文件hfmTree中 //函数参数: //向量HT的前n个分量表示叶子结点,最后一个分量表示根结点,各字符的编码长度不等,所以按实际长度动态分配空间 void Select(HuffmanTree t,int i,int &s1,int &s2) { //s1为最小的两个值中序号最小的那个 int j; int k=ImpossibleWeight;//k的初值为不可能达到的最大权值 for(j=1;j<=i;j++) { if(t[j].weight<k&&t[j].parent==0) {k=t[j].weight; s1=j;} } t[s1].parent=1; k=ImpossibleWeight; for(j=1;j<=i;j++) { if(t[j].weight<k&&t[j].parent==0) {k=t[j].weight; s2=j;} } t[s2].parent=1; } void HuffmanCoding(HuffmanTree &HT,HuffmanCode &HC,int *w,int num)//w存放n个字符的权值(均>0),构造哈夫曼树HT,并求出n个字符的哈弗曼编码HC { int i,m,c,s1,s2,start,f; HuffmanTree p; char* cd; if(num<=1) return; m=2*num-1;//m为结点数,一棵有n个叶子结点的哈夫曼树共有2n-1个结点,可以存储在一个大小为2n-1的一维数组中 HT=(HuffmanTree)malloc((m+1)*sizeof(HTNode));//0号单元未用 //--------初始化哈弗曼树------- for(p=HT+1,i=1;i<=num;i++,p++,w++) { p->weight=*w; p->parent=0; p->lchild=0; p->rchild=0; } for(i=num+1;i<=m;i++,p++) { p->weight=0; p->parent=0; p->lchild=0; p->rchild=0; } //--------建哈夫曼树------------- for(i=num+1;i<=m;i++) { Select(HT,i-1,s1,s2);//在HT[1...i-1]选择parent为0且weight最小的两个结点,其序号分别为s1和s2 HT[s1].parent=i; HT[s2].parent=i; HT[i].lchild=s1; HT[i].rchild=s2;//左孩子权值小,右孩子权值大 HT[i].weight=HT[s1].weight+HT[s2].weight; } //-------从叶子到根逆向求每个字符的哈弗曼编码-------- HC=(HuffmanCode)malloc((num+1)*sizeof(char *));//指针数组:分配n个字符编码的头指针向量 cd=(char*)malloc(n*sizeof(char*));//分配求编码的工作空间 cd[n-1]='\0';//编码结束符 for(i=1;i<=n;i++)//逐个字符求哈弗曼编码 { start=n-1;//编码结束符位置 for(c=i,f=HT[i].parent;f!=0;c=f,f=HT[f].parent)//从叶子到跟逆向求哈弗曼编码 if(HT[f].lchild==c) cd[--start]='0';//判断是左孩子还是右孩子(左为0右为1) else cd[--start]='1'; HC[i]=(char*)malloc((num-start)*sizeof(char*));//按所需长度分配空间 int j,h; strcpy(HC[i],&cd[start]); } free(cd); } //****************初始化函数****************** void Initialization() { flag=1;//标记为已初始化 int i; w=(int*)malloc(n*sizeof(int));//为26个字符权值分配空间 info=(char*)malloc(n*sizeof(char));//为26个字符分配空间 ifstream infile("ABC.txt",ios::in); if(!infile) { cerr<<"打开失败"<<endl; exit(1); } for(i=0;i<n;i++) { infile>>info[i]; infile>>w[i]; } infile.close(); cout<<"读入字符成功!"<<endl; HuffmanCoding(HT,HC,w,n); //------------打印编码----------- cout<<"依次显示各个字符的值,权值或频度,编码如下"<<endl; cout<<"字符"<<setw(6)<<"权值"<<setw(11)<<"编码"<<endl; for(i=0;i<n;i++) { cout<<setw(3)<<info[i]; cout<<setw(6)<<w[i]<<setw(12)<<HC[i+1]<<endl; } //---------将建好的哈夫曼树写入文件------------ cout<<"下面将哈夫曼树写入文件"<<endl; ofstream outfile("hfmTree.txt",ios::out); if(!outfile) { cerr<<"打开失败"<<endl; exit(1); } for(i=0;i<n;i++,w++) { outfile<<info[i]<<" "; outfile<<w[i]<<" "; outfile<<HC[i+1]<<" "; } outfile.close(); cout<<"已经将字符与对应的权值,编码写入根目录下文件hfmTree.txt"<<endl; } //*****************输入待编码字符函数************************* void Input() { char string[100]; ofstream outfile("ToBeTran.txt",ios::out); if(!outfile) { cerr<<"打开失败"<<endl; exit(1); } cout<<"请输入你想要编码的字符串(字符个数应小于100),以#结束"<<endl; cin>>string; for(int i=0;string[i]!='\0';i++) { if(string[i]=='\0') break; outfile<<string[i]; } cout<<"获取报文成功"<<endl; outfile.close(); cout<<"------"<<"已经将报文存入根目录下的ToBeTran.txt文件"<<endl; } //******************编码函数**************** void Encoding() { int i,j; char*string; string=(char*)malloc(MaxN*sizeof(char)); cout<<"下面对根目录下的ToBeTran.txt文件中的字符进行编码"<<endl; ifstream infile("ToBeTran.txt",ios::in); if(!infile) { cerr<<"打开失败"<<endl; exit(1); } for(i=0;i<100;i++) { infile>>string[i]; } for(i=0;i<100;i++) if(string[i]!='#') cout<<string[i]; else break; infile.close(); ofstream outfile("CodeFile.txt",ios::out); if(!outfile) { cerr<<"打开失败"<<endl; exit(1); } for(i=0;string[i]!='#';i++) { for(j=0;j<n;j++) { if(string[i]==info[j]) outfile<<HC[j+1]; } } outfile<<'#'; outfile.close(); free(string); cout<<"编码完成------"; cout<<"编码已写入根目录下的文件CodeFile.txt中"<<endl; } //******************译码函数**************** void Decoding() { int j=0,i; char *code; code=(char*)malloc(MaxC*sizeof(char)); char*string; string=(char*)malloc(MaxN*sizeof(char)); cout<<"下面对根目录下的CodeFile.txt文件中的代码进行译码"<<endl; ifstream infile("CodeFile.txt",ios::in); if(!infile) { cerr<<"打开失败"<<endl; exit(1); } for( i=0;i<MaxC;i++) { infile>>code[i]; if(code[i]!='#') { cout<<code[i]; } else break; } infile.close(); int m=2*n-1; for(i=0;code[i-1]!='#';i++) { if(HT[m].lchild==0) { string[j]=info[m-1]; j++; m=2*n-1; i--; } else if(code[i]=='1') m=HT[m].rchild; else if(code[i]=='0') m=HT[m].lchild; } string[j]='#'; ofstream outfile("TextFile.txt",ios::out); if(!outfile) { cerr<<"打开失败"<<endl; exit(1); } cout<<"的译码为------"<<endl; for( i=0;string[i]!='#';i++) { outfile<<string[i]; cout<<string[i]; } outfile<<'#'; outfile.close(); cout<<"------译码完成------"<<endl; cout<<"译码结果已写入根目录下的文件TextFile.txt中"<<endl; free(code); free(string); } //*************打印编码函数**************** void Code_printing() { int i; char *code; code=(char*)malloc(MaxC*sizeof(char)); cout<<"下面打印根目录下文件CodeFile.txt中的编码"<<endl; ifstream infile("CodeFile.txt",ios::in); if(!infile) { cerr<<"打开失败"<<endl; exit(1); } for( i=0;i<MaxC;i++) { infile>>code[i]; if(code[i]!='#') cout<<code[i]; else break; } infile.close(); cout<<endl; ofstream outfile("CodePrin.txt",ios::out); if(!outfile) { cerr<<"打开失败"<<endl; exit(1); } for(i=0;code[i]!='#';i++) { outfile<<code[i]; } outfile.close(); free(code); cout<<"------打印结束------"<<endl; cout<<"该字符形式的编码文件已写入文件CodePrin.txt中"<<endl; } //*************打印哈夫曼树函数**************** int numb=0; void coprint(HuffmanTree start,HuffmanTree HT) //start=ht+26这是一个递归算法 { if(start!=HT) { ofstream outfile("TreePrint.txt",ios::out); if(!outfile) { cerr<<"打开失败"<<endl; exit(1); } numb++; //number=0 该变量为已被声明为全局变量 coprint(HT+start->rchild,HT); //递归先序遍历 cout<<setw(5*numb)<<start->weight<<endl; //if(start->rchild==0) cout<<info[start-HT-1]<<endl; outfile<<start->weight; coprint(HT+start->lchild,HT); numb--; outfile.close(); } } void Tree_printing(HuffmanTree HT,int num) { HuffmanTree p; p=HT+2*num-1; //p=HT+26 cout<<"下面打印赫夫曼树"<<endl; coprint(p,HT); //p=HT+26 cout<<"打印工作结束"<<endl; } //*************主函数************************** int main() { char choice; do{ cout<<"************哈弗曼编/译码器系统***************"<<endl; cout<<"请选择您所需功能:"<<endl; cout<<"<I>:初始化哈弗曼树"<<endl; cout<<"<W>:输入待编码字符串"<<endl; cout<<"<E>:利用已建好的哈夫曼树进行编码"<<endl; cout<<"<D>:利用已建好的哈夫曼树进行译码"<<endl; cout<<"<P>:打印代码文件"<<endl; cout<<"<T>:打印哈夫曼树"<<endl; cout<<"<Q>:退出"<<endl; if(flag==0) { cout<<"请先初始化哈夫曼树,输入I"<<endl; cout<<"<系统将从根目录下的文件ABC.txt中读出26个字母并对字母进行编码>"<<endl; } cin>>choice; switch(choice) { case 'I':Initialization();break; case 'W':Input();break; case 'E':Encoding();break; case 'D':Decoding();break; case 'P':Code_printing();break; case 'T':Tree_printing(HT,n);break; case 'Q':;break; default:cout<<"输入的命令出错,请重新输入!"<<endl; } }while(choice!='Q'); free(w); free(info); free(HT); free(HC); system("pause"); return 0; }
C语言Base64 编码
C语言BASE64的编码,其主主要用于SMTP服务器验证的时候所用的编码,
香农编码**********C语言
课程设计 香农编码@@@@@@ 信息论与编码
高性能c语言编码
c语言编码–优化tips 好的算法 减少指令数 减少跳转 对于cpu密集型进程来说,语言层面有下面一些tips可供参考和借鉴1.减少指令数1.1 简单函数使用宏或者内联函数非内联函数会有入栈、出栈的操作,int min(int a, int b) { return a < b ? a b; } 改成使用 #define min(a,b) ((a) < (b) ? (a) : (
C语言实现编码
用c语言完成计算编码和惟一可译函数的判断,同时还附加有概率排序功能
base6编码__C语言
Base64编码 Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。可查看RFC2045~RFC2049,上面有MIME的详细规范。–来源于百度百科 代码 #include &amp;amp;lt;stdio.h&amp;amp;gt; #include &amp;amp;lt;stdlib.h&amp;amp;gt; #include &amp;amp;lt;string.h&amp;amp;gt; //ba...
c语言的小编码
C语言很好玩希望你们看过这个代码后能对c语言有一定的认识和兴趣。
冒泡排序的c语言编码
冒泡排序的c语言代码,刚学会v
香农编码c语言
自己写的 香农编码 c语言,成功编码;喜欢的可以下载
C语言GSM610编码
C语言写的 GSM610 音频 编码------------
斐波那契c语言编码
c语言编程代码,题目:斐波那契!!!!!!!!!!!!!!!!!!!!!!!!!
C语言 Huffman编码
在双工通讯中利用哈夫曼编码和译码。功能: 1) 初始化:从键盘读入字符集大小n,以及n个字符和相应的权值,建立哈夫曼树,并存入文件A中。 2) 编码:利用已经建好的哈夫曼树,对文件B中的正文进行编码,然后将结果存入文件C中。 3) 译码:利用已经建好的哈夫曼树将文件C中的代码进行译码,结果存入文件D中。
C语言编码规则
C语言编程规则,对ARM编程很有指导意义
C语言编码与字符转换
c语言支持的字符编码 多字节字符编码:用一个字节表示数字、字母,用多个字节表示其它字符(汉字两个字节)。字符长度定义:一个字节为一个字符长度。 宽字节字符编码(UNICODE):全部用两个字节表示字符。字符长度定义:两个字节为一个字符长度。 c语言默认的字符编码方式为多字节字符编码(单双字节混合表示) 宽字节字符定义方式:  wchar_t cText = L'A'; //字符 wch
基因编码-C语言
基因编码 题目: 输入一个长为 (k≤8)01串s,按照&quot;ABC编码规则&quot;进行编码,ABC编码规则是: 例如: 代码分享: #include &amp;lt;stdio.h&amp;gt; #include &amp;lt;string.h&amp;gt; void temp(char a[],int begin,int end)//定义一个二分法临时函数 { int numA=0,numB=0; int i; for(i=...
信息处理与编码;基于C语言的循环编码
信息处理与编码,基于C语言的循环编码,所谓循环特性是指:循环码中任一许用码组经过循环移位后,所得到的码组仍然是许用码组。
go语言的urlencode编码使用方式
1,首先我们可以查看godoc.com下的net/urlhttps://godoc.org/net/url2,我们来看下演示代码package mainimport ( "crypto/md5" "flag" "fmt" "net/url" "strings" "time" )func main() { fmt.Println("./timet
unicode编码转GB2312编码 C代码
通过二分法查表的方法,把unicode编码转化为gbk编码。调用函数即可实现 UCToGB2312(入参unicode字符串),返回值为gbk字符串
香农编码c代码
用纯C写的香农编码代码,很容易看明白的,好用
海明编码 c编码
用c语言写的海明编码及解码,同时含有出错校验。
huffman码编码的c语言代码
huffman码编码的c语言代码,思路较为清晰,还是能看懂的,挺好的
Base64编码及其运用
说到Base64相信大家都不陌生,在web开发过程中经常可以见到它的身影。Base64是一种编码方式,常用于表示、传输、与存储二进制数据。用64个可打印字符来表示二进制数据,从而解决一些二进制数据无法使用的场景。Base64最初主要用户多用途互联网邮件扩展(MIME Email), MIME规定了用于表示各式各样数据(非英文符号数据)的符号化方法,而Base64编码就作为内容传输编码方式之一(cha
编码算法之指数哥伦布编码
引言最近在看H.264/AVC的一些编码信息,印象最深的就是sps,pps 中的指数哥伦布(Golomb)熵编码算法,从网上搜了一些内容,发现讲解的不是很详细,所以自己总结一下便于自己查看sps,pps中常用的指数哥伦布编码算法有 1、无符号指数哥伦布熵编码 ue(v) 2、有符号指数哥伦布熵编码 se(v) 3、映射指数哥伦布熵编码 me(v) 4、截断指数哥伦布熵编码 te(v) 后两
base64编码C语言实现
base64编码C语言实现,包含.c和.h文件
C语言实现的香农编码
1. 掌握香浓编码方法 2. 复习排序算法 3. 复习进制转换技术 4. 给出单符号离散信源的信源符号的一阶概率分布。 5. 对信源符号按概率降序排列 6. 计算累加概率 7. 计算各符号对应码字长度 8. 将各累加概率转换成二进制; 9. 将对应符号进行信源编码;
MP3编码c语言的实现
如题需要的自己下了.............
费诺编码c语言
这是一个fano编码的c语言实现,fano编码是无损压缩编码的一种,可以实现数据的无损压缩。
C语言初学者编码练习
习题如下: 123456789 9个数字,通过在这个9个数字之间添加‘+’,'-'符号使得等式成立。 如:123-45-67+89=100 通过编写C语言代码,将以上的所有情况都找出来。
C语言赫夫曼树编码
C语言赫夫曼树编码 数据结构上机实验的题目 需要的下载
图像四叉树编码(c语言)
用c语言编的比较简单
rs编码c语言实现
支持GF(2^n)域的rs编解码,可直接修改参数实现不同方式的RS编码和解码
费诺编码 C语言
费诺编码 C语言 费诺编码:对于给定概率分布的信源,按照费诺编码的方法进行计算机实现.
汉明码编码,c语言源程序
汉明编码源程序,用c语言编写,实现译码和纠错
相关热词 c#检测非法字符 c#双屏截图 c#中怎么关闭线程 c# 显示服务器上的图片 api嵌入窗口 c# c# 控制网页 c# encrypt c#微信网页版登录 c# login 居中 c# 考试软件