一道竞赛题,但是应该不难
Waterloo ACM Programming Contest Oct 5, 1996
这里是链接
http://acm.hit.edu.cn/ojs/show.php?Proid=1536&Contestid=0
我的代码, 如果有空,麻烦大家帮我看看,谢谢了
#include <stdio.h>
#include <stdlib.h>
#define SIZE 27
void scan_data (char*, int);
void scan_and_change_text (char*, char*);
void print_result (char*, int);
int main (void)
{
char org_alp[SIZE]; /*原始字母表*/
char sub_alp[SIZE]; /*替换后的字母表*/
scan_data (org_alp, SIZE);
scan_data (sub_alp, SIZE);
print_result(sub_alp, SIZE);
print_result(org_alp, SIZE);
scan_and_change_text (org_alp, sub_alp);
return 0;
}
/*
*define scan_data
*该函数用于读取数据
*/
void scan_data (char* w_arr, int size)
{
int i;
for (i = 0; i <= size - 1; i++)
{
scanf ("%c", &w_arr[i]);
}
}
/*
*define scan_and_change_text
*该函数用于读取并加密(改变)text
*/
void scan_and_change_text (char *org_alp, char *sub_alp)
{
char c;
int i,counter = 0;
while( (scanf ("%c", &c) ) != EOF)
{
for (i = 0; i <= SIZE - 2; i++)
{
if (c == org_alp[i])
{
c = sub_alp[i];
break;
}
}
putchar(c);
counter++;
if (counter == 64)
printf ("\n");
if (c == '\n')
counter = 0;
}
printf ("\n");
}
/*
*define print_result
*该函数用于打印最后的结果
*第一个参数为数组首元素的地址,第二个参数为数组大小
*/
void print_result (char *w_arr, int side)
{
int i;
for (i = 0; i <= side - 1; i++)
{
printf ("%c", w_arr[i]);
}
}
----------------解决方案--------------------------------------------------------
英文的啊帮不了你了
----------------解决方案--------------------------------------------------------
我可以翻译~~
在线等很久了
题目的大致意思就是:
按照你输入的第一行和第二行对应的字符来改变接下来输入的text
比如:
abc
cba
aaa
那么输出就是
cba
abc
ccc
----------------解决方案--------------------------------------------------------
着是啥意思啊?
没看懂。。
讲的在详细点好不
----------------解决方案--------------------------------------------------------
其实就是我们一直用的文件加密(最简单版)
输入:
abcdefg
1234567(这是前两行)
aabbccddeeffgg(这是TEXT)
好了,该输出了:
1234567 (按照输入的前两行一一对应输出,a就舒服1,b就是2,等等)
abcdefg (同理, 1就输出a,等等)
11223344556677 (同理)
----------------解决方案--------------------------------------------------------
给你改完了
#include <stdio.h>
#include <stdlib.h>
#define SIZE 27
void scan_data (char*, int);
void scan_and_change_text (char*, char*);
void print_result (char*, int);
int main (void)
{
char org_alp[SIZE]; /*原始字母表*/
char sub_alp[SIZE]; /*替换后的字母表*/
scan_data (org_alp, SIZE);
scan_data (sub_alp, SIZE);
print_result(sub_alp, SIZE);
print_result(org_alp, SIZE);
scan_and_change_text (org_alp, sub_alp);
return 0;
}
/*
*define scan_data
*该函数用于读取数据
*/
void scan_data (char* w_arr, int size)
{
scanf ("%s", w_arr);
}
/*
*define scan_and_change_text
*该函数用于读取并加密(改变)text
*/
void scan_and_change_text (char *org_alp, char *sub_alp)
{
char c;
int i,counter = 0;
while( (scanf ("%c", &c) )&&c != '1')
{
for (i = 0; i <= SIZE - 2; i++)
{
if (c == org_alp[i])
{
c = sub_alp[i];
break;
}
}
putchar(c);
counter++;
if (counter == 64)
printf ("\n");
if (c == '\n')
counter = 0;
}
printf ("\n");
}
/*
*define print_result
*该函数用于打印最后的结果
*第一个参数为数组首元素的地址,第二个参数为数组大小
*/
void print_result (char *w_arr, int side)
{
int i;
for (i = 0; i <= side - 1; i++)
{
printf ("%c", w_arr[i]);
}
}
[此贴子已经被作者于2007-2-7 22:18:32编辑过]
----------------解决方案--------------------------------------------------------
没啥问题 就是输入的问题 还有结束的问题
这个程序必须输入26个字母 不然输出的时候可能会有乱码
----------------解决方案--------------------------------------------------------
恩,谢谢!
但是好象还是错了,你可以在上面提交一下.
我觉得你是对的~
那可能就是我理解错了~~那就太不好意思啦~~~~~
----------------解决方案--------------------------------------------------------
恩,谢谢!
但是好象还是错了,你可以在上面提交一下.
我觉得你是对的~
那可能就是我理解错了~~那就太不好意思啦~~~~~
没有错啊 。就是你说的答案啊
----------------解决方案--------------------------------------------------------
当然如果是输入这些不行拉
abc
cba
aaa
那还要在改程序
因为你着数组是有27个存储单元 如果少输入了 肯定会输出乱码的
----------------解决方案--------------------------------------------------------