全国软件专业人才开发与设计赛题之中等题“统计省份人员信息”

本文主要是介绍全国软件专业人才开发与设计赛题之中等题“统计省份人员信息”,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

2.2基于人员名单:

李爱华,北京

张立,吉林
吴祖含,上海
张颖,河北
李文虎,北京
许林,湖南
赵平复,河北
唐笑,北京
刘小明,河北

董其云,北京

统计其信息,输出格式如下:

北京

李爱华

李文虎 

唐笑 

董其云

 

河北

1

……

 

其中省份不用考虑顺序,人员之间不用考虑顺序。

 参考程序:

  1  #include  < stdio.h >
  2  #include  < string .h >
  3  #include  < stdlib.h >
  4 
  5  FILE  * stream;
  6  FILE  * streamOut;
  7 
  8 
  9  // 构造存储结构
 10  struct  Node{
 11       char  Pro[ 20 ]; // 存储省份
 12       char  Name[ 50 ]; // 存储名字
 13       int  counts;
 14      Node *  nextPro; // 下一省份结点
 15      Node *  nextName; // 下一人员结点
 16  };
 17 
 18  Node root; // 根结点
 19 
 20  // 添加新的省份到链表中
 21  void  addPro(Node *  node)
 22  {
 23      Node *  tNode = root.nextPro;
 24      root.nextPro = node;
 25      node -> nextPro = tNode; // 插入结点
 26  }
 27 
 28  // 插入proNode结点后名字
 29  // pronode中的省份跟新插入结点的省份相同
 30  void  addName(Node *  proNode,Node *  node)
 31  {
 32      Node *  pNode = proNode -> nextName;
 33      proNode -> nextName = node;
 34      node -> nextName = pNode;
 35      proNode -> counts ++ ;
 36  }
 37 
 38  // 添加一个结点,根据判断是否之前出现过,进行插入或者新建的工作
 39  // 需要调用addName()和addPro()两个函数
 40  void  addNode(Node *  node)
 41  {
 42       if (root.nextPro == NULL) // 首次加入
 43      {
 44          root.nextPro = node;
 45      }
 46       else
 47      {
 48           // 循环找到相同的省份头结点
 49          Node *  cuNode = root.nextPro;
 50           while (cuNode != NULL  &&  strcmp(cuNode -> Pro,node -> Pro) != 0 )
 51          {
 52              cuNode = cuNode -> nextPro;
 53          }
 54           if (cuNode == NULL) // 没有找到相同省份的结点出现
 55          {
 56              addPro(node);
 57          }
 58           else
 59          {
 60              addName(cuNode,node);
 61          }
 62      }
 63  }
 64 
 65  // 对同级的结果进行格式化的输出
 66  void  outputFile()
 67  {
 68       if  ((streamOut  =  fopen(  " 人员名单2.txt " " w "  ))  !=  NULL)
 69      {
 70          Node *  pNode = root.nextPro;
 71           while (pNode != NULL)
 72          {
 73              fprintf(streamOut, " %s " ,pNode -> Pro);
 74              fprintf(streamOut, " %d\n " ,pNode -> counts);
 75               for (Node *  t = pNode;t != NULL;t = t -> nextName)
 76              {
 77                  fprintf(streamOut, " %s\n " ,t -> Name);
 78                   if (t -> nextName == NULL)
 79                      fprintf(streamOut, " \n " );
 80              }
 81              pNode = pNode -> nextPro;
 82          }
 83          fclose( streamOut );
 84      }
 85  }
 86 
 87 
 88  void  releaseNode()
 89  {
 90 
 91      Node *  tNode = root.nextPro;
 92      Node *  toDel;
 93       while (tNode != NULL)
 94      {
 95          Node *  delN = tNode -> nextName;
 96           while (delN != NULL)
 97          {
 98              Node *  de = delN;
 99              delN = delN -> nextName;
100              free(de);
101          }
102          toDel = tNode;
103          tNode = tNode -> nextPro;
104          free(toDel);
105      }
106  }
107  int  main()
108  {
109      
110       char  line[ 100 ];
111       int  position;
112 
113       // 初始化
114      root.nextPro = NULL;
115      root.nextName = NULL;
116 
117       if ( (stream  =  fopen(  " 人员名单.txt " " r "  ))  !=  NULL )
118      {
119           // printf("打开成功\n");
120           while (fgets( line,  100 , stream )  !=  NULL)
121          {
122               int  len = strlen(line);
123               // printf("%d\n",len);
124               if (feof(stream))
125              {
126                  line[len] = ' \n ' ;
127                  line[len + 1 ] = ' \0 ' ;
128                  len = strlen(line);
129                   // printf("%d\n",len);
130              }
131              
132              position = strcspn(line, " , " );
133               if (position != 0 ) // 分隔成功
134              {
135                  line[position] = ' \0 ' ;
136                  Node *  node = (Node * )malloc( sizeof (Node));
137                   // 清空数据
138                   // memset(node->Pro,0,sizeof(node->Pro));
139                   // memset(node->Name,0,sizeof(node->Name));
140                  node -> nextPro = NULL;
141                  node -> nextName = NULL;
142                  node -> counts = 1 ;
143                  strcpy(node -> Name,line);
144                  strcpy(node -> Pro, & line[position + 1 ]);
145                  addNode(node);
146              }
147               // printf( "%s", line);
148          }
149          outputFile();
150          releaseNode();
151          fclose( stream );
152          
153      }
154       return   1 ;
155  }
156 

 

版权声明版权归作者WeiSteven所有,转载请注明! 

这篇关于全国软件专业人才开发与设计赛题之中等题“统计省份人员信息”的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/678576

相关文章

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

hdu1496(用hash思想统计数目)

作为一个刚学hash的孩子,感觉这道题目很不错,灵活的运用的数组的下标。 解题步骤:如果用常规方法解,那么时间复杂度为O(n^4),肯定会超时,然后参考了网上的解题方法,将等式分成两个部分,a*x1^2+b*x2^2和c*x3^2+d*x4^2, 各自作为数组的下标,如果两部分相加为0,则满足等式; 代码如下: #include<iostream>#include<algorithm

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

OpenHarmony鸿蒙开发( Beta5.0)无感配网详解

1、简介 无感配网是指在设备联网过程中无需输入热点相关账号信息,即可快速实现设备配网,是一种兼顾高效性、可靠性和安全性的配网方式。 2、配网原理 2.1 通信原理 手机和智能设备之间的信息传递,利用特有的NAN协议实现。利用手机和智能设备之间的WiFi 感知订阅、发布能力,实现了数字管家应用和设备之间的发现。在完成设备间的认证和响应后,即可发送相关配网数据。同时还支持与常规Sof

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

业务中14个需要进行A/B测试的时刻[信息图]

在本指南中,我们将全面了解有关 A/B测试 的所有内容。 我们将介绍不同类型的A/B测试,如何有效地规划和启动测试,如何评估测试是否成功,您应该关注哪些指标,多年来我们发现的常见错误等等。 什么是A/B测试? A/B测试(有时称为“分割测试”)是一种实验类型,其中您创建两种或多种内容变体——如登录页面、电子邮件或广告——并将它们显示给不同的受众群体,以查看哪一种效果最好。 本质上,A/B测

软件设计师备考——计算机系统

学习内容源自「软件设计师」 上午题 #1 计算机系统_哔哩哔哩_bilibili 目录 1.1.1 计算机系统硬件基本组成 1.1.2 中央处理单元 1.CPU 的功能 1)运算器 2)控制器 RISC && CISC 流水线控制 存储器  Cache 中断 输入输出IO控制方式 程序查询方式 中断驱动方式 直接存储器方式(DMA)  ​编辑 总线 ​编辑

【北交大信息所AI-Max2】使用方法

BJTU信息所集群AI_MAX2使用方法 使用的前提是预约到相应的算力卡,拥有登录权限的账号密码,一般为导师组共用一个。 有浏览器、ssh工具就可以。 1.新建集群Terminal 浏览器登陆10.126.62.75 (如果是1集群把75改成66) 交互式开发 执行器选Terminal 密码随便设一个(需记住) 工作空间:私有数据、全部文件 加速器选GeForce_RTX_2080_Ti