JayMagician 2022-06-14 02:34 采纳率: 28.6%
浏览 73
已结题

c语言数据结构链表遍历

问题遇到的现象和发生背景

小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

  • 写回答

3条回答 默认 最新

  • xdspower 2022-06-14 12:52
    关注
    #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;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 6月16日
  • 已采纳回答 6月16日
  • 创建了问题 6月14日

悬赏问题

  • ¥50 易语言把MYSQL数据库中的数据添加至组合框
  • ¥20 求数据集和代码#有偿答复
  • ¥15 关于下拉菜单选项关联的问题
  • ¥20 java-OJ-健康体检
  • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况