小T昨天很不爽
昨天体彩销售点买了2注生日号码玩,当晚开奖后……
小T号码: 8902088
中奖号码:3902888
一个号码不对就差了十几万……
小T想:为什么规则是那样玩的啊……为什么5个号码要连续才能中二等奖啊……
我自己创建个规则,开N个数字,只要数字位置对了不一定要连续就可以有奖。
现在有一个中奖号码,有一个兑奖号码,小T想知道一共有多少个数字位置正确的,N太大了……
要求用链表做
输入:
输入数据第一行包含一个整数T表示有T组测试数据
对于每组测试数据
第一行包含一个整数N,表示有N个数字
第二行包含N个中奖号码
第三行包含N个兑奖号码
输出:
对于每组测试数据输出有多少个号码位置正确了
样例输入:
2
7
3902888
8902088
10
1234567890
0987654321
样例输出:
5
0
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
char data;/*数据域*/
struct node *next;/*指针域*/
} Node,*Link;
void destroy(Link head)
{
Link p;
while (head!=NULL)/*当还有头结点存在时*/
{
p=head;/*头结点是待删除结点*/
head=head->next;/*先连*/
free(p);/*后断*/
}
}
int main()
{
int t,i,j,n,count;
scanf("%d",&t);
int *rt = (int *)malloc(sizeof(int) * t); /* 申请一个用来记录结果数据的数组。*/
for(i =0;i<t;i++) /*多组输入*/
{
count=0;
scanf("%d",&n);
Link head1,head2,c1,c2,l;
head1=NULL;
head2=NULL;
for(j=0; j<n; j++)/*创建后续节点*/
{
l=(Link)malloc(sizeof(Node));
l->next=NULL;
scanf("%c",&(l->data));
if(head1==NULL){
head1=l;
c1=head1;
}else{
c1->next=l;
c1=l;
}
}
getchar();
for(j=0; j<n; j++)/*创建后续节点*/
{
l=(Link)malloc(sizeof(Node));
l->next=NULL;
scanf("%c",&(l->data));
if(head2==NULL){
head2=l;
c1=head2;
}else{
c1->next=l;
c1=l;
}
}
c1=head1;
c2=head2;
while(c1!=NULL)/*因为中奖号码和兑奖号码一样长,当c1不为空时,c2也不为空*/
{
if(c1->data==c2->data)/*他们相等时*/
count++;
c1=c1->next;/*往后移*/
c2=c2->next;
}
rt[i]=count;
destroy(head1);
destroy(head2);
}
for(i=0;i<t;i++){
printf("%d\n",rt[i]);
}
return 0;
}
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
char data;//数据域
struct node *next;//指针域
} Node,*Link;
int main()
{
int t;
scanf("%d",&t);
while(t--)//多组输入
{
int count=0,n;
scanf("%d",&n);
Link head1,head2,p1,p2;
head1=(Link)malloc(sizeof(Node));//创建头节点
head2=(Link)malloc(sizeof(Node));
head1->next=NULL;
head2->next=NULL;
for(int i=0; i<n; i++)//创建后续节点
{
Link p1=(Link)malloc(sizeof(Node));
scanf("%c",&(p1->data));
p1->next=head1->next;
head1->next=p1;
}
getchar();
for(int i=0; i<n; i++)
{
Link p2=(Link)malloc(sizeof(Node));
scanf("%c",&(p2->data));
p2->next=head2->next;
head2->next=p2;
}
p1=head1->next;
p2=head2->next;
while(p1!=NULL)//因为中奖号码和兑奖号码一样长,当p1不为空时,p2也不为空
{
if(p1->data==p2->data)//他们相等时
count++;
p1=p1->next;//往后移
p2=p2->next;
}
printf("%d\n",count);
}
return 0;
}
你这算法没意义啊!算出的结果体量太大结论还是靠猜,还是逃脱不了正态分布,建议重新设计算法。
算法思路可以给你一个...不想说话
https://baijiahao.baidu.com/s?id=1727076337553315074&wfr=spider&for=pc&searchword=%E6%8A%9B%E7%A1%AC%E5%B8%81%E6%AD%A3%E6%80%81%E5%88%86%E5%B8%83