您的位置:首页 > 其它

第三届蓝桥杯8密码发生器设计题

2016-02-20 15:55 260 查看
    在对银行账户等重要权限设置密码的时候,我们常常遇到这样的烦恼:如果为了好记用生日吧,容易被破解,不安全;如果设置不好记的密码,又担心自己也会忘记;如果写在纸上,担心纸张被别人发现或弄丢了...

    这个程序的任务就是把一串拼音字母转换为6位数字(密码)。我们可以使用任何好记的拼音串(比如名字,王喜明,就写:wangximing)作为输入,程序输出6位数字。

    变换的过程如下:

    第一步. 把字符串6个一组折叠起来,比如wangximing则变为:

    wangxi

    ming 

    第二步. 把所有垂直在同一个位置的字符的ascii码值相加,得出6个数字,如上面的例子,则得出:

    228 202 220 206 120 105

    第三步. 再把每个数字“缩位”处理:就是把每个位的数字相加,得出的数字如果不是一位数字,就再缩位,直到变成一位数字为止。例如: 228 => 2+2+8=12 => 1+2=3

    上面的数字缩位后变为:344836, 这就是程序最终的输出结果!

    要求程序从标准输入接收数据,在标准输出上输出结果。

    输入格式为:第一行是一个整数n(<100),表示下边有多少输入行,接下来是n行字符串,就是等待变换的字符串。

    输出格式为:n行变换后的6位密码。

    例如,输入:

5

zhangfeng

wangximing

jiujingfazi

woaibeijingtiananmen

haohaoxuexi

    则输出:

772243

344836

297332

716652

875843

    注意:

    请仔细调试!您的程序只有能运行出正确结果的时候才有机会得分!

    

    在评卷时使用的输入数据与试卷中给出的实例数据可能是不同的。

    请把所有函数写在同一个文件中,调试好后,存入与【考生文件夹】下对应题号的“解答.txt”中即可。

    

    相关的工程文件不要拷入。

    

    源代码中不能能使用诸如绘图、Win32API、中断调用、硬件操作或与操作系统相关的API。

    
    允许使用STL类库,但不能使用MFC或ATL等非ANSI c++标准的类库。例如,不能使用CString类型(属于MFC类库)。

#include <stdio.h>
//缩位
int fun(int n)
{
while(n>=10)
{
int sum=0;
while(n)
{
sum+=n%10;
n/=10;
}
n=sum;
}
return n;
}

int main()
{
int n;
scanf("%d\n",&n);
while(n--)
{
int mi[6]={0},i=0;
char name;
while((name=getchar())!='\n')//getchar()返回是一个字符,遇到EOF或Enter结束
{
mi[i%6]+=name;//int的方法中返回char类型,那么返回的结果是char的
//ASCII码值。但在返回类型是char方法中,不能直接返回int类型
i++;
}
for(int j=0; j<6; j++)
printf("%d",fun(mi[j]));
printf("\n");
}
return 0;
}
截图:



另附一法:

#include <stdio.h>

int litenum(int oldnum)
{
int newnum=0;
if ( oldnum < 10 ) return oldnum;
while ( oldnum > 0 )
{
newnum += oldnum % 10 ;
oldnum /= 10;
}
return litenum(newnum);
}

int main()
{
int n;
scanf("%d\n",&n);
while (n--)
{
int snum[6]={0,0,0,0,0,0}; //密码
char tmpc;
int time=0,k;
/*
由于题目没有给出输入的字符串的最大长度
使用while(1)和getchar()来实现几乎不受限的输入
*/
while (1)
{
tmpc=getchar();
if ( tmpc=='\n' ) break;
snum[time%6] += tmpc;
time++;
}
for (k=0;k<6;k++)
{
printf("%d",litenum(snum[k]));
}
printf("\n");
}
return 0;
}

总结:

1.可以由char型直接转化为int型,如int类型+char类型既是加上char类型的ASCII码,但是由int型不能直接转化为char类型

2.'\n'是换行符即Enter键,

gerchar()读取的是一个字符,遇到Enter或EOF键结束
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: