帮我改一个C语言的错误 花血本了 三分最佳答案加70分都是你的 我有三个提问都没人回答 你回答全给你了

题目 - 密码
描述
Bob 和 Alice 开始使用一种全新的编码系统。它是一种基于一组私有钥匙的。他们选择了n个不同的数a1 , . . .,an, 它们都大于0小于等于n。 加密过程如下:待加密的信息放置在这组加密钥匙下,信息中的字符和密钥中的数字一一对应起来。信息中位于i位置的字母将被写到加密信息的第ai个位置, ai 是位于i位置的密钥。加密信息如此反复加密,一共加密 k 次。

信息长度小于等于n。如果信息比 n 短, 后面的位置用空格填补直到信息长度为n。

请你帮助 Alice 和 Bob 写一个程序,读入密钥,然后读入加密次数 k 和要加密的信息,按加密规则将信息加密。 假设0 < n <= 200
关于输入
输入包括几块。每块第一行有一个数字n, 0 < n <= 200. 接下来的行包含n个不同的数字。数字都是大于0小于等于n的。下面每行包含一个k和一个信息字符串,它们之间用空格格开。每行以换行符结束,换行符不是要加密的信息。每个块的最后一行只有一个0。 最后一个块后有一行,该行只有一个0。
关于输出
输出有多个块,每个块对应一个输入块。每个块包含输入中的信息经过加密后的字符串,顺序与输入顺序相同。所有加密后的字符串的长度都是 n。 每一个块后有一个空行。
例子输入
这是我的程序
能给我改下发在下面么、
注释下哪有问题哈

#include<stdio.h>
#include<string.h>
int main()
{
int i,n,t,s,k,z=0,j=0,a[200];
char b[200],c[200],d[1000],e[200];
while(scanf("%d",&n)&&n!=0)
{
for(i=0;i<n;i++)
scanf("%d",&a[i]);
while(1)
{
scanf("%d ",&k);
if(k==0)
break;
gets(b);
for(s=0;s<k;s++)
{
for(i=0;i<n;i++)
{
t=a[i]-1;
c[t]=b[i];
}
strcpy(e,b);
strcpy(b,c);
strcpy(c,e);
}
z++;
for(i=0;i<n;i++)
d[i+n*(z-1)]=b[i];
}
d[n*z+1]='\0';
for(i=0;i<z;i++)
{
for(j=(z*i);j<(n*(i+1));j++)
{
printf("%c",d[j]);
}
printf("\n");
}
}
return 0;
}

第1个回答  2011-12-16
英语 How do pharmaceutical companies face the problem of policy management and self-development
星际语言 啊叽叽哇叽啊瓦萨滴几嗖嗖嗖。
韩日结合语 ひしともれふつのろ゜でょょっぶへれるヌトヨビョなめよょなちふぬ
闻盲语
╭︿︿︿╮
{/ 0 0 /}
( (qp) )
︶︶︶
╭︿︿︿╮
{/-★★-/}
( (oo) )
︶︶︶
╭︿︿︿╮
{/ @ @ /}
( (oo) )
︶︶︶
╭⌒╮¤      `
╭╭ ⌒╮ ●╭○╮ 
╰ ----╯/█∨█\  
~~~~~~~~~~∏~~∏~~~~~~~~~~~

.'"'. ___,,,___ .'``.
: (\ `."'"``` ```"'"-' /) ;
: \ `./ .'
`. :.'
/ _ _ \
| 0} {0 |
| / \ |
| / \ |
| / \ |
\ | .-. | /
`. | . . / \ . . | .'
`-._\.'.( ).'./_.-'
`\' `._.' '/'
`. --'-- .'
`-...-'
_(\_/)
,((((^`\
(((( (6 \
,((((( , \
,,,_ ,((((( /"._ ,`,
((((\\ ,... ,(((( / `-.-'
))) ;' `"'"'""(((( (
((( / ((( \
)) | |
(( | . ' |
)) \ _ ' `t ,.')
( | y;- -,-""'"-.\ \/
) / ./ ) / `\ \
|./ ( ( / /'
|| \\ //'|
|| \\ _//'||
|| )) |_/ ||
\_\ |_/ ||
`'" \_\ 我不知道~~~(╯▽╰)
`'"
第2个回答  2011-12-16
我想你其中有一个没弄清楚,就是这句话:
接下来的行包含n个不同的数字。数字都是大于0小于等于n的。
如果n=5,那么密钥就只能是1 2 3 4 5,n=10密钥就只能是1 2 3 4 5 6 7 8 9 10,只能是顺序变一下如。1 2 3 4 5 6 7 8 9 10位置对应
2 4 3 6 7 9 8 4 10 1
总之我要好好编一下,待会我把我编的代码传上来!追问

恩,那句话我是清楚的哈,我编了好久,我也是帮别人回答问题来编的,现在自己不会了,特别想弄懂,可以看我其他问题,还有不同的方法,我前后提了三次问

追答

我会看的,这是我编的程序,不知道对不对
#include
#include
#include
int main()
{
int i,j,n,k,temp;
char a[200],b[200];

scanf("%d",&n);

int mima[n+1];
/*mima[0]让它空着,这个数组就是密码,因为有下标和数组里面的数的对应关系 */
for(i=1;i<=n+1;i++)
scanf("%d",&a[i]);
/*这里先这样吧,只能靠输入的那个人自觉了,必须满足在那个范围内又不重复*/
i=1;
while(a[i]=getchar()!='\n');
for(;i<=n;i++) a[i]=' ';
a[i]='\0';
/*这里给数组赋值 先赋字母 再赋空格 再赋最后的0*/
scanf("%d",&k);
for(i=0;i<k;i++)/*外循环 做k次循环*/
{ for(j=1;j<n+1;j++)
{ temp=mima[j];
b[temp]=a[j];}/*这里一次密码变化*/
for(j=1;j<n+1;j++)
a[j]=b[j]; /*将变好的的b[]数组的内容返回给a[]*/
}
puts(a+1);
}

第3个回答  2011-12-17
不明白楼主觉得哪里有问题?测试了下,没发现大问题
密钥长度n:4,密钥:3142,加密次数:3,加密信息:abcd,输入如下:
4
3
1
4
2
3 abcd
0
0
输出:
cadb

我觉得有个小问题就是加密信息不足n时没有补空格;另外输出 d[] 时不是怎么存入的就怎么输出么,楼主的写法没看明白,且在多条加密信息时输出好像是有问题的追问

我自己写好了
没问题了
可以加密多条语句
纠结了我好久啊

追答

strcpy(e,b);
strcpy(c,e);
这两句有什么用?c的内容不是马上被覆盖了么(加密次数>1时)

本回答被提问者采纳

...三分最佳答案加70分都是你的 我有三个提问都没人回答 你回答全给你...
`'" \\_\\ 我不知道~~~(╯▽╰)`'"

一个简单的c语言游戏,请哪位师傅帮帮,我吧所有的分都给你
再加个计时器就可以了。写程序不是分不分的问题,一个程序从写到调试也需要时间的 我想不会有人给你做这个程序的

C语言程序改错题改对了两个错但还有一个错而且程序不能运行可以得几分...
填空和改错评分是按照文本来评分,也就是说,改正或填对一处,就拿一部分分。改错18分,每处6分,你的情况是拿12分。但是要注意,改错和填空千万不要在让你改动的以外的地方做出任何改动,那怕只是多了一个空格。也不要再让你改正的地方添加额外的回车。否则后果自负 编程题就不行了,编程题的评分...

我学C语言刚好20天,但编了个程序花了半个小时还编错了,看答案程序能看...
20天看起来很长,但实际能学到的东西并不是很多。况且C语言基础大都是一些语法,把这些语法记下来就可以了。写代码的时候不要老想着写一个自己的东西出来。先看别人的代码,然后把别人的代码写出来编译。这样很容易就熟悉了C语言的基础语法知识,接下来就是深入学习了。所以总的来说写错了不算什么坚持...

关于C语言编写程序的一个疑问 高手帮忙看看我的程序哪错了
看了你的代码觉得,你在C语言的语法规则上还有待提高啊,在此举出你所给出的代码的若干错误。首先,你的代码不完整。第9、11、13行要定义三个100行的二维字符数组,如果仅仅是类似char adj[100][12]={"开心的"}的定义;这样adj[1]到adj[99]这99个词都会是空值(ASCII码为0),若用printf()...

问几个C语言里很多人没注意过的问题
说实话要是这几个问题只要理解了C语言的人,怎么可能不明白。很多人没注意,说明他们还没学懂。当然我也不是在自夸,我也是初学者,可是我还是为楼上几位悲哀。1.你要知道程序在内存中的结构,有栈区、堆区、文字常量区、全局变量区、函数区,使用 char* a = "xxx";这样的语句初始化指针a,"...

C语言(题)分数的变化,一个分数a\/b的分子和分母都加上一个数C后是变大...
=EOF)\/\/%lf%lf%lf%{if(b+c!=0){s=a\/b;x=(a+c)\/(b+c);if(x>s)printf("变大\\n");else if(x

c语言“三个数的混合运算”,我编了一个计算器程序,可是只能算出两个...
你这只能实现单一的运算,不能实现混合运算,比如3x(4+5)首先你要将运算的式子存到一个字符数组中,然后找出各运算符号以及括号的位置,再根据运算的规则。比如你找x位置为1,(的位置为2,+的位置为4,)的位置为6,把这些位置记在相应的变量中,然后先计算位置2和位置6之间的式子,得到结果再与3...

各位恋爱高手进来帮帮我,重谢啊!
第三本南开大学出版社的《上机考试习题集 三级C语言程序设计》,俗称《南开100题》,机试必用,这几年机试的题目都来自这套题中,因为机试是南开大学出的,这个很重要,搞懂了机试肯定过,9栋书店没卖,我是在南大买的,也很难找,买不到拿我的去复印一份,另外还要一本笔试习题集,带有详细解答的最好,练习巩固知识...

这是c语言的一道题,谁知道答案我写的这个else可以加吗,还是必须加还是...
不可以加,不能加。因为return -1;应该在for循环语句外面,即for循环完全执行完才会运行到。它跟if语句不在一起的。如果加上else,就会变成数组的第一个元素如果不等于x,函数就返回-1了。所以不能加else。

相似回答
大家正在搜