#include<bits/stdc++.h>
using namespace std;
char key[3000];
int temp_input[100];
int readnum(int x)
{
int ans=0,cns=1;
for(int i=0;i<x;i++)
{
char temp=getchar();
while((temp!='0')&&(temp!='1'))
temp=getchar();
temp_input[i]=temp-'0';
}
for(int i=x-1;i>=0;i--)
{
ans+=temp_input[i]*cns;
cns<<=1;
}
return ans;
}
int main(void)
{
//freopen("in.txt","r",stdin);
int weishu,j,x;
char ans;
while(gets(key)!=NULL)
{
//printf("The key is %s\n",key);
//printf("Step1\n");
while(weishu=readnum(3))
{
//printf("Step2\n");
while(true)
{
//printf("Step3\n");
j=readnum(weishu);
if((j+1)==(1<<weishu))
{
break;
}
//printf("Step4\n");
//printf("weishu=%d and j=%d\n",weishu,j);
x=(1<<weishu)-weishu-1+j;
//printf("x=%d\n",x);
ans=key[x];
printf("%c",ans);
}
}
printf("\n");
scanf(" ");
}
return 0;
}
Uva 213 Message Decoding
紫書第四章例題
我用的基本上是紫書的方法:首先我們可以推出解碼序列和位數、其二進制形式數值的聯繫(找規律),就是x=(1<<weishu)-weishu-1+j;
然後寫一個readnum函數,用來讀入數據。
爲什麼要寫一個函數來讀入數據呢?因爲這道題,可能讀2位的數據,也有可能讀3位的數據。。。。寫一個函數,可以方便的利用getchar,使得程序結構簡化。
最後這道題的坑點在於字符的讀入,一定要處理無關字符!我用的是scanf(" ");
代碼:
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.