uva213資訊解碼
阿新 • • 發佈:2019-02-15
然後是ac過的程式碼#include <stdio.h> #include <string.h> #include <math.h> char text[10000],head[300]; int Gets(void) { char ch; for(int i=0;(ch=getchar())!=EOF&&ch!='\n';i++) head[i]=ch; if(ch==EOF) return 0; else return 1; } int change(int i,int n) { int sum=0; for(int k=0;k<n;k++,i++) { int m=text[i]-48; sum=sum+m*(int)pow(2.0,(double)(n-k-1)); } return sum; } int isend(int i,int n) { if(change(i,n)==((int)pow(2.0,(double)n)-1)) return 1; return 0; } int figure(int i,int n) { return change(i,n)+(int)pow(2.0,(double)n)-1-n; } int main(void) { while(Gets()) { char text1[1000]; scanf("%s",text); int m=strlen(text); for(int i=0;i<m;) { int n=change(i,3),k,ok=0; if(n==0) {printf("\n");break;} for(k=i+3;k<m;k+=n) { if(m-k-1<n) { scanf("%s",text1); strcat(text,text1); m=strlen(text); } if(m-k-1>=n) { if(isend(k,n)) {i=k+n;break;} if(!isend(k,n)) { int num=figure(k,n); printf("%c",head[num]); } } } if(ok) break; } getchar(); } return 0; }
#include <stdio.h> #include <string.h> #include <ctype.h> #include <math.h> char text[300],c; int len,sum; void print() { for(int i=sum=0;i<len;++i) { do scanf("%c", &c);while (!isdigit (c)); /*除去輸入是換行符的情況*/ sum=sum*2+(c-'0'); } if(sum>=((int)pow(2.0,(double)len)-1)) return; else { sum=sum+(int)pow(2.0,(double)len)-1-len; printf("%c",text[sum]); print(); } } int main() { int l1,l2,l3; while (gets(text)!= NULL) { if (!text[0]) continue; while(scanf("%1d%1d%1d",&l1,&l2,&l3),len=4*l1+2*l2+l3)/*注意scanf("%1d",&l1);表示的是輸入一位整數l1*/ print(); printf("\n"); } return 0; }