题目描述
小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
分析:
还是对链表疏忽了, 这个题我卡了好久。一开始未能将结点中的int改为char导致一直错。
#include"stdio.h"
#include"string.h"
typedef struct a{
char node;
struct a *next;
}*LinkList,Node;
void CerateListTail(LinkList *L,int n)//创建一个链表
{
LinkList p,r;
int i;
*L=(LinkList)malloc(sizeof(Node));
r=*L;
for(i=0;i<n;i++)
{
p=(LinkList)malloc(sizeof(Node));
scanf("%c",&(p->node));
r->next=p;
r=p;
}
r->next=NULL;
}
int main()
{
LinkList a,b,end;
int m,n,T,count;
char c;
while(~scanf("%d",&T))
{ //printf("T=%d\n",T);
scanf("%c",&c);
while(T--)
{ count=0;
scanf("%d",&m);
scanf("%c",&c);
CerateListTail(&a,m);
scanf("%c",&c);
CerateListTail(&b,m);
scanf("%c",&c);
a=a->next;
b=b->next;
while(a!=NULL)
{ // printf("a->node=%c\n",a->node);
//printf("b->node=%c\n",b->node);
if(a->node==b->node)
count++;
a=a->next;
b=b->next;
}
printf("%d\n",count);
}
}
}