1009 Enigma

本题的重点是理解清楚题意并能代码模拟。形式是二战德国密码机,和数据结构、算法几乎没有联系。

 1 #include <stdio.h>
 2 #include <string.h>
 3
 4 int main(){
 5     char rotor[30],cryp[1000];
 6     int i,j,blank=0,num=1,m,n,temp[26],tran[3][26];
 7     while(scanf("%d", &m)>=0&&m){
 8         if(blank)
 9             printf("\n");
10         else
11             blank=1;
12         printf("Enigma %d:\n",num++);
13         for(i=0;i<3;i++){
14             scanf("%s",rotor);
15             for(j=0;j<m;j++){
16                 temp[j] = (int)(rotor[j]-‘A‘)-j;
17                 tran[i][(j+temp[j])%m]=temp[j];
18             }
19         }
20         scanf("%d", &n);
21         int lp0,lp1,lp2,t,len;
22         for(i=0;i<n;i++){
23             lp0=lp1=lp2=0;
24             scanf("%s",cryp);
25             len=strlen(cryp);
26             for(j = 0; j < len; j++){
27                 t = cryp[j] - ‘A‘;
28                 t -= tran[2][(t + lp2) % m];
29                 t = (t + m) % m;
30                 t -= tran[1][(t + lp1) % m];
31                 t = (t + m) % m;
32                 t -= tran[0][(t + lp0) % m];
33                 t = (t + m) % m;
34                 printf("%c", t+‘a‘);
35                 lp0 = (lp0 + m - 1) % m;
36                 if((j+1) % m == 0)
37                     lp1 = (lp1 + m - 1) % m;
38                 if((j+1) % (m*m) == 0)
39                     lp2 = (lp2 + m - 1) % m;
40             }
41             printf("\n");
42         }
43     }
44     return 0;
45 }
时间: 2024-10-18 03:19:24

1009 Enigma的相关文章

[ZOJ 1009] Enigma (模拟)

题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1009 题目大意:给你三个转换轮,只有当第一个转换轮转动一圈后第二个才会转,当第二个转动一圈后第三个才会转.转换轮的意思是我按动一个按钮,显示器经过转换轮的转换显示另外一个字母.每按下一个按钮,第一个转换轮都会转动一次. 叉姐说得好,多学习一下思维方法,有些问题都是能够很高效率的想出来的.脑洞什么的全是骗人的. 注意看这张图: 中间转动轮的点, 左右两边是一一对应

POJ百道水题列表

以下是poj百道水题,新手可以考虑从这里刷起 搜索1002 Fire Net1004 Anagrams by Stack1005 Jugs1008 Gnome Tetravex1091 Knight Moves1101 Gamblers1204 Additive equations 1221 Risk1230 Legendary Pokemon1249 Pushing Boxes 1364 Machine Schedule1368 BOAT1406 Jungle Roads1411 Annive

zoj题目分类

饮水思源---zoj 转载自:http://bbs.sjtu.edu.cn/bbscon,board,ACMICPC,file,M.1084159773.A.html 注:所有不是太难的题都被归成了“简单题”,等到发现的时候已经太晚了,我太死脑筋 了……:( 有些题的程序我找不到了,555……:( SRbGa的题虽然都很经典……但是由于其中的大部分都是我看了oibh上的解题报告后做 的,所以就不写了…… 题目排列顺序没有规律……:( 按照个人感觉,最短路有的算做了DP,有的算做了图论. 有些比较

PAT 1009 说反话 C语言

给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出. 输入格式:测试输入包含一个测试用例,在一行内给出总长度不超过80的字符串.字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用1个空格分开,输入保证句子末尾没有多余的空格. 输出格式:每个测试用例的输出占一行,输出倒序后的句子. 输入样例: Hello World Here I Come 输出样例: Come I Here World Hello 1 #include<stdio.h> 2 #

PAT 乙级 1009 说反话 (20) C++版

1009. 说反话 (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出. 输入格式:测试输入包含一个测试用例,在一行内给出总长度不超过80的字符串.字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用1个空格分开,输入保证句子末尾没有多余的空格. 输出格式:每个测试用例的输出占一行,输出倒序后的句子. 输入

HDU 1009 FatMouse&#39; Trade

FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 59851    Accepted Submission(s): 20095 Problem Description FatMouse prepared M pounds of cat food, ready to trade with the cats gu

BZOJ 1009: [HNOI2008]GT考试 AC自动机+矩阵快速幂

经典题目了....虽然只有一个不能出现的字符串,但还是写了ac自动机 1009: [HNOI2008]GT考试 Time Limit: 1 Sec  Memory Limit: 162 MB Submit: 2051  Solved: 1257 [Submit][Status][Discuss] Description 阿申准备报名参加GT考试,准考证号为N位数X1X2....Xn(0<=Xi<=9),他不希望准考证号上出现不吉利的数字.他的不吉利数学A1A2...Am(0<=Ai<

【贪心专题】HDU 1009 FatMouse&#39; Trade (贪心选取)

链接:click here~~ 题意:老鼠准备了M磅猫食,准备拿这些猫食跟猫交换自己喜欢的食物.有N个房间,每个房间里面都有食物.你可以得到J[i]单位的食物,但你需要付出F[i]单位的的猫食. 计算M磅猫食可以获得最多食物的重量. [解题思路]贪心算法,求最优解.将J[i]/F[i]的值从大到小排列,每次取最大的,局部最优,达到全局最优,从而获得最大值. 代码: // 贪心策略,优先选择投资最大的房间,每选择一次,交换次数依次减少,最后的次数用于价值最小的 //注意精度转化:1.0*(int

贪心/hdu 1009 FatMouse&#39; Trade

题意 有n种物品,每一种需要不同的消费,现在手里有m块钱,求问最多可以买多少 分析 贪心 把每一种物品的价格算出来,然后sort一下,按照价格从便宜到贵排序,能买多少买多少,买买买! Accepted Code 1 /* 2 PROBLEM:hdu1009 3 AUTHER:Nicole Lam 4 MEMO:贪心 5 */ 6 7 #include<cstdio> 8 #include<algorithm> 9 using namespace std; 10 11 12 stru