居民身份证是18位字符的编码,每个人的编码都是唯一的,校验规则如下: ∑(ai*wi)mod 11 = 1 i表示号码字符从左至右包括校验码字符在内的位置序号;ai表示第i位置上的号码字符值;Wi表示第i位置上的加权因子。即将各位上的数值乘上位权之和对11取余,余数为1则表示该编码正确。注意:如果最后一位校验码是“X”或“x”,则代表该校验码的数值为10。 各位的权值依次是:7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1 例如某身份证号码为:370683198901117657,这是正确的编码。 又比如身份证号:43038120051120041X,这是正确的编码, 还比如身份证号:150402200002010020,这是正确的编码。 又如某号码为:470683198902117657,这是错误的编码。 格式 输入格式 第一行是一个数字n(1≤n≤150),表示后面有n个号码需要判断 从第二行起,每行一个18位的字符串,表示要判断的身份证号码,一共有n行 输出格式 输出一个整数值,表示正确的身份证号码的个数 c语言


```c #include <stdio.h> #include <ctype.h> int validateID(char *id) { int weights[] = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1}; int sum = 0; for (int i = 0; i < 17; i++) { if (!isdigit(id[i])) { return 0; } sum += (id[i] - '0') * weights[i]; } char last = id[17]; int lastValue; if (last == 'X' || last == 'x') { lastValue = 10; } else if (isdigit(last)) { lastValue = last - '0'; } else { return 0; } sum += lastValue * weights[17]; return (sum % 11 == 1); } int main() { int n; scanf("%d", &n); getchar(); // 读取换行符 int count = 0; char id[19]; // 18位身份证号 + '\0' for (int i = 0; i < n; i++) { fgets(id, sizeof(id), stdin); id[17] = '\0'; // 确保只读取前18个字符 if (validateID(id)) { count++; } } printf("%d\n", count); return 0; } ``` 1. 权重数组的索引与身份证号字符位置要严格对应,权重数组长度必须为18。 2. 校验最后一位字符时需要同时处理数字和'X'/'x'的情况。 3. 输入处理时要注意换行符的影响,使用getchar()或适当处理缓冲区。 [2025-05-18 21:24:01 | AI写代码神器 | 418点数解答]
- 居民身份证是18位字符的编码,每个人的编码都是唯一的,校验规则如下: ∑(ai*wi)mod 11 = 1 i表示号码字符从左至右包括校验码字符在内的位置序号;ai表示第i位置上的号码字符值;Wi表示第i位置上的加权因子。即将各位上的数值乘上位权之和对11取余,余数为1则表示该编码正确。注意:如果最后一位校验码是“X”或“x”,则代表该校验码的数值为10。 各位的权值依次是:7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1 例如某身份证号码为:370683198901117657,这是正确的编码。 又比如身份证号:43038120051120041X,这是正确的编码, 还比如身份证号:150402200002010020,这是正确的编码。 又如某号码为:470683198902117657,这是错误的编码。 格式 输入格式 第一行是一个数字n(1≤n≤150),表示后面有n个号码需要判断 从第二行起,每行一个18位的字符串,表示要判断的身份证号码,一共有n行 输出格式 输出一个整数值,表示正确的身份证号码的个数(530点数解答 | 2025-05-15 21:58:44)97
- 用C语言,居民身份证是18位字符的编码,每个人的编码都是唯一的,校验规则如下: ∑(ai*wi)mod 11 = 1 i表示号码字符从左至右包括校验码字符在内的位置序号;ai表示第i位置上的号码字符值;Wi表示第i位置上的加权因子。即将各位上的数值乘上位权之和对11取余,余数为1则表示该编码正确。注意:如果最后一位校验码是“X”或“x”,则代表该校验码的数值为10。 各位的权值依次是:7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1 例如某身份证号码为:370683198901117657,这是正确的编码。 又比如身份证号:43038120051120041X,这是正确的编码, 还比如身份证号:150402200002010020,这是正确的编码。 又如某号码为:470683198902117657,这是错误的编码。 格式 输入格式 第一行是一个数字n(1≤n≤150),表示后面有n个号码需要判断 从第二行起,每行一个18位的字符串,表示要判断的身份证号码,一共有n行 输出格式 输出一个整数值,表示正确的身份证号码的个数(435点数解答 | 2025-05-15 21:59:17)120
- 居民身份证是18位字符的编码,每个人的编码都是唯一的,校验规则如下: ∑(ai*wi)mod 11 = 1 i表示号码字符从左至右包括校验码字符在内的位置序号;ai表示第i位置上的号码字符值;Wi表示第i位置上的加权因子。即将各位上的数值乘上位权之和对11取余,余数为1则表示该编码正确。注意:如果最后一位校验码是“X”或“x”,则代表该校验码的数值为10。 各位的权值依次是:7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1 例如某身份证号码为:370683198901117657,这是正确的编码。 又比如身份证号:43038120051120041X,这是正确的编码, 还比如身份证号:150402200002010020,这是正确的编码。 又如某号码为:470683198902117657,这是错误的编码。 格式 输入格式 第一行是一个数字n(1≤n≤150),表示后面有n个号码需要判断 从第二行起,每行一个18位的字符串,表示要判断的身份证号码,一共有n行 输出格式 输出一个整数值,表示正确的身份证号码的个数(562点数解答 | 2025-05-18 21:23:12)119
- 居民身份证是18位字符的编码,每个人的编码都是唯一的,校验规则如下: ∑(ai*wi)mod 11 = 1 i表示号码字符从左至右包括校验码字符在内的位置序号;ai表示第i位置上的号码字符值;Wi表示第i位置上的加权因子。即将各位上的数值乘上位权之和对11取余,余数为1则表示该编码正确。注意:如果最后一位校验码是“X”或“x”,则代表该校验码的数值为10。 各位的权值依次是:7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1 例如某身份证号码为:370683198901117657,这是正确的编码。 又比如身份证号:43038120051120041X,这是正确的编码, 还比如身份证号:150402200002010020,这是正确的编码。 又如某号码为:470683198902117657,这是错误的编码。 格式 输入格式 第一行是一个数字n(1≤n≤150),表示后面有n个号码需要判断 从第二行起,每行一个18位的字符串,表示要判断的身份证号码,一共有n行 输出格式 输出一个整数值,表示正确的身份证号码的个数 c语言(418点数解答 | 2025-05-18 21:24:01)92
- 子序列:是指在序列中选择某些元素,按照序列中的顺序连接在一起形成的。比如 blm、bl、oea、ma 都是 bolema 的子序列。但 loe 这个序列不是。我们定义子序列长度为子序列中包含的元素数量,比如 blm 的长度为 3,bl 的长度为 2。如果没有特殊说明,空序列和整个序列都是原序列的一个子序列。我们一般会用非空子序列来排除空序列,用真子序列来排除整个序列,用非空真子序列来同时排除两个。 子串:是指在序列中选择连续的某些元素,按照序列中的顺序连接在一起形成的,所以子串也常被称作连续子序列。比如 bol、lem 都是 bolema 的子串。但 blm 不是。与子序列相同,子串包含的元素个数也被称为子串的长度,同时也有“非空”、“真”等描述方法。 现在小a得到了一个仅包含英文小写字母的字符串 s,小a想要在其中找到一个子串 t,使得 bolema 是 t 的子序列。显然有可能有多个这样的 t,小a想要一个知道最短的 t 的长度是多少。 比如当 s 为 bboboxleymabobo 时,子串 boboxleyma、boxleymabobo、boxleyma 等都包含子序列(188点数解答 | 2024-11-15 20:51:47)213
- 子序列:是指在序列中选择某些元素,按照序列中的顺序连接在一起形成的。比如 blm、bl、oea、ma 都是 bolema 的子序列。但 loe 这个序列不是。我们定义子序列长度为子序列中包含的元素数量,比如 blm 的长度为 3,bl 的长度为 2。如果没有特殊说明,空序列和整个序列都是原序列的一个子序列。我们一般会用非空子序列来排除空序列,用真子序列来排除整个序列,用非空真子序列来同时排除两个。 子串:是指在序列中选择连续的某些元素,按照序列中的顺序连接在一起形成的,所以子串也常被称作连续子序列。比如 bol、lem 都是 bolema 的子串。但 blm 不是。与子序列相同,子串包含的元素个数也被称为子串的长度,同时也有“非空”、“真”等描述方法。 现在小a得到了一个仅包含英文小写字母的字符串 s,小a想要在其中找到一个子串 t,使得 bolema 是 t 的子序列。显然有可能有多个这样的 t,小a想要一个知道最短的 t 的长度是多少。 比如当 s 为 bboboxleymabobo 时,子串 boboxleyma、boxleymabobo、boxleyma 等都包含子序列(161点数解答 | 2024-11-15 20:52:38)175
- 题目描述 输入三个整数 x , y , z x,y,z, 如果 x x为奇数,输出 1 ∼ y 1∼y之间的所有数,如果 x x为偶数,输出 1 ∼ z 1∼z之间的所有数。 输入格式 输入包括一行,包含三个整数 x , y , z x,y,z,数字之间用空格隔开。 输出格式 输出包括一行 如果 x x为奇数,输出 1 ∼ y 1∼y之间的所有数,如果 x x为偶数,输出 1 ∼ z 1∼z之间的所有数,输出时,数与数之间用1个空格隔开。 input1 复制 1 10 5 output1 复制 1 2 3 4 5 6 7 8 9 10 input2 复制 4 20 4 output2 复制 1 2 3 4 样例解释 对于样例 1 1: x x是奇数, y = 10 y=10,因此输出 1 ∼ 10 1∼10。 对于样例 2 2: x x是偶数, z = 10 z=10,因此输出 1 ∼ 4 1∼4 。 c++ (391点数解答 | 2025-06-14 09:57:45)163
- 题目描述 输入三个整数 x , y , z x,y,z, 如果 x x为奇数,输出 1 ∼ y 1∼y之间的所有数,如果 x x为偶数,输出 1 ∼ z 1∼z之间的所有数。 输入格式 输入包括一行,包含三个整数 x , y , z x,y,z,数字之间用空格隔开。 输出格式 输出包括一行 如果 x x为奇数,输出 1 ∼ y 1∼y之间的所有数,如果 x x为偶数,输出 1 ∼ z 1∼z之间的所有数,输出时,数与数之间用1个空格隔开。 c++(372点数解答 | 2025-07-06 15:39:04)110
- 题目(description): 卫星导航系统(如我国自主研发的北斗卫星导航系统)能实时获取位置、速度、时间等时空信息,在交通运输、农林渔业、气象测报、通信授时、救灾减灾、公共安全等领域都得到了广泛应用。 在应用层面,卫星导航系统一般以报文方式进行数据传输,其中$gprmc是常用报文之一,基本的格式如下: $gprmc,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>*hh <1> utc时间,hhmmss.sss(时分秒.毫秒)格式 <2> 定位状态,a=有效定位,v=无效定位 <3> 纬度ddmm.mmmm(度分)格式 <4> 纬度半球n(北半球)或s(南半球) <5> 经度dddmm.mmmm(度分)格式 <6> 经度半球e(东经)或w(西经) <7> 地面速率(000.0~999.9节) <8> 地面航向(000.0~359.9度,以正北为参考基准) <9> utc日期,ddmmyy(日月年)格式 <10> 磁偏角(000.0~180.0度,前面的0也(385点数解答 | 2025-01-08 03:43:54)292
- 题目(description): 卫星导航系统(如我国自主研发的北斗卫星导航系统)能实时获取位置、速度、时间等时空信息,在交通运输、农林渔业、气象测报、通信授时、救灾减灾、公共安全等领域都得到了广泛应用。 在应用层面,卫星导航系统一般以报文方式进行数据传输,其中$gprmc是常用报文之一,基本的格式如下: $gprmc,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>*hh <1> utc时间,hhmmss.sss(时分秒.毫秒)格式 <2> 定位状态,a=有效定位,v=无效定位 <3> 纬度ddmm.mmmm(度分)格式 <4> 纬度半球n(北半球)或s(南半球) <5> 经度dddmm.mmmm(度分)格式 <6> 经度半球e(东经)或w(西经) <7> 地面速率(000.0~999.9节) <8> 地面航向(000.0~359.9度,以正北为参考基准) <9> utc日期,ddmmyy(日月年)格式 <10> 磁偏角(000.0~180.0度,前面的0也(346点数解答 | 2025-01-08 03:46:29)286
- P3631[NOIP2003 普及组] 乒乓球 普及- 字符串 NOIp 普及组 模拟 2003 标准IO 传统题 时间限制 1000ms 内存限制 256MB 通过/尝试次数 411/1121 来源 洛谷 题目背景 国际乒联现在主席沙拉拉自从上任以来就立志于推行一系列改革,以推动乒乓球运动在全球的普及。其中 11 11 分制改革引起了很大的争议,有一部分球员因为无法适应新规则只能选择退役。华华就是其中一位,他退役之后走上了乒乓球研究工作,意图弄明白 11 11 分制和 21 21 分制对选手的不同影响。在开展他的研究之前,他首先需要对他多年比赛的统计数据进行一些分析,所以需要你的帮忙。 题目描述 华华通过以下方式进行分析,首先将比赛每个球的胜负列成一张表,然后分别计算在 11 11 分制和 21 21 分制下,双方的比赛结果(截至记录末尾)。 比如现在有这么一份记录,(其中 W W 表示华华获得一分, L L 表示华华对手获得一分): WWWWWWWWWWWWWWWWWWWWWWLW WWWWWWWWWWWWWWWWWWWWWWLW 在 11 11 分制下,此时(675点数解答 | 2025-04-28 18:19:45)203
- 一个 5×6 的迷宫样例如下: 要求给出从起点(1,1)到终点(3,4)的路径。 为了处理方便,保证最外圈全都为障碍物。 扩展到一般情况,一个 m×n 的迷宫,要求输出从起点(1,1)到终点(m-2,n-2)的路径。 测试实例保证路径是唯一的。 该题要求自行设计一个栈来做。如果设计的是顺序栈,则保证栈的大小不超过 200 个元素。 输入 第一行为两个整数 m 和 n,表示 m×n 的迷宫。 接下来有 m 行,每行有 n 个数(n 个数之间用空格间隔,值 = 0 表示可以通行,值 = 1 表示为障碍物) 输出 输出从起点到终点的路径,每个坐标占一行,坐标间的行号和列号用一个空格间隔。具体格式可参考样例。c++ 源代码(732点数解答 | 2024-11-03 02:34:53)343