POJ 1026 Cipher

本文提供了一种解决POJ 1026 Cipher问题的方法,通过C++代码实现,主要思路为计算每个位置上的循环步数,并使用模运算进行加密模拟。
Run IDUserProblemResultMemoryTimeLanguageCode LengthSubmit Time
7539261kingpro1026Accepted168K63MSC++721B2010-08-27 00:33:51

 

#include <stdio.h>
int main()
{
	int num[200], cyc[200], n=0, i=0, cnt=0, k=0; char ch[201], cht[201]={0};
	while(scanf("%d", &n), n!=0)
	{
		for(i=0; i<n && (scanf("%d", &num[i]), true); i++);
		for(i=0; i<n && (k=i, true); i++)
			for(int j=0; j<=n && (k=num[k]-1, k==i ? (cyc[i]=j+1, false) : true); j++);
		while(scanf("%d", &cnt), cnt!=0)
		{
			for(i=0; (i<n && (ch[i]=' ', true)) || (getchar(), gets(ch), false); i++);
			for(i=n-1; i>0 && (ch[i]==0 ? (ch[i]=' ', false) : true); i--);
			for(i=0; (i<n && (k=i, true))  || (cht[i]=0, printf("%s\n", cht), false); i++)
				for(int j=0, c=cnt%cyc[i]; (j<c && (k=num[k]-1, true)) || (cht[k]=ch[i], false); j++);
		}
		putchar('\n');
	}
	return 0;
}

 加密问题。

每一位的加密是独立的,可以求得每一位的循环步数,用模值来模拟。

转载于:https://www.cnblogs.com/Kingpro/archive/2010/08/27/POJ_1026_Cipher.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值