马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
typedef struct List
{
char ch;
struct List *prior;
struct List *next;
}node;
void init(node **head)
{
node *temp;
int i;
for(i=0;i<26;i++)
{
temp=(node *)malloc(sizeof(node));
if(!temp)
exit(0);
temp->ch='A'+i;
if(*head==NULL)
{
(*head)=temp;
(*head)->next=(*head);
(*head)->prior=(*head);
}
else
{
temp->next=(*head);
temp->prior=(*head)->prior;
(*head)->prior->next=temp;
(*head)->prior=temp;
}
}
}
void tex(node **head1)
{
node *temp;
printf("请输入加密内容:\n");
while(1)
{
temp=(node *)malloc(sizeof(node));
if(!temp)
exit(0);
scanf("%c",&temp->ch);
if(temp->ch=='0')
break;
if(*head1==NULL)
{
(*head1)=temp;
(*head1)->next=(*head1);
(*head1)->prior=(*head1);
}
else
{
temp->next=(*head1);
temp->prior=(*head1)->prior;
(*head1)->prior->next=temp;
(*head1)->prior=temp;
}
}
}
void sec(node *head,node *head1)
{
node *temp=head1;
node *target;
int i,n;
srand((unsigned)time(NULL));
do
{
for(target=head;target->next!=head&&target->ch!=temp->ch;target=target->next)
;
n=-1*(rand()%100)+50;
if(n>=0)
{
for(i=0;i<n;i++)
target=target->next;
}
else
{
for(i=0;i<(abs(n));i++)
target=target->prior;
}
printf("%c -- %d\n",target->ch,n);
temp=temp->next;
}while(temp!=head1);
}
void output(node *head)
{
node *temp=head;
do
{
printf("%c",temp->ch);
temp=temp->next;
}while(temp!=head);
putchar('\n');
}
int main(void)
{
node *head=NULL;
node *head1=NULL;
init(&head);
tex(&head1);
sec(head,head1);
output(head);
output(head1);
return 0;
}
写了一个做简单加密的小程序,然后不同的输入方式结果不一样,有一些不解,请各位大佬指点一下。
第一种:
输入:ABC0
输出:
N -- -39
B -- -26
W -- -32
ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABC
第二种:
输入:
A
B
C
0
输出:
O -- -38
H -- -44
G -- -21
N -- 14
J -- -19
C -- -23
ABCDEFGHIJKLMNOPQRSTUVWXYZ
A
B
C
这个简单,你输入的是A\nB\nC\n0,\n也看作是一个字符
\n是遍历整个A~Z都没找到于是停留在了Z,每次输入Z也是随机加密的。
|