当前位置: 首页 > article >正文

团体程序设计天梯赛-练习集——L1-016 查验身份证

前言

这道题对之前数学不好的人不怎么友好,我就是那个数学不好的人,概念了解后,这道题就没有难度了,很简单的一道15分。

L1-016 查验身份证

一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下:

首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};然后将计算的和对11取模得到值Z;最后按照以下关系对应Z值与校验码M的值:

Z:0 1 2 3 4 5 6 7 8 9 10
M:1 0 X 9 8 7 6 5 4 3 2

现在给定一些身份证号码,请你验证校验码的有效性,并输出有问题的号码。

输入格式:

输入第一行给出正整数N(≤100)是输入的身份证号码的个数。随后N行,每行给出1个18位身份证号码。

输出格式:

按照输入的顺序每行输出1个有问题的身份证号码。这里并不检验前17位是否合理,只检查前17位是否全为数字且最后1位校验码计算准确。如果所有号码都正常,则输出All passed

输入样例1:

4
320124198808240056
12010X198901011234
110108196711301866
37070419881216001X

输出样例1:

12010X198901011234
110108196711301866
37070419881216001X

输入样例2:

2
320124198808240056
110108196711301862

输出样例2:

All passed

好了,上面又给了一堆又大又长的题目,真的,这种题目看不下去直接,这个题目说了一个什么意思呢,就是给一串数字(身份证号),判断这串数字合不合理,根据前17个数字加权求和,然后对11取模与校验码对比,得出校验码与第18位做对比,一样的就是正确,不一样的就是错误。

这个题开始难道了加权求和上面,由于数学不太好,去查了加权求和的相关知识,不知道的小伙伴可以看一下下面

加权求和是一种数学运算,用于计算一组数值的加权平均值。每个数值都有一个对应的权重,权重表示该数值在总和中的重要性。加权求和的公式如下:

加权求和=w1⋅x1+w2·x2+⋯+wn·xn

其中
wi是第i个数值的权重
xi是第i个数值
n是数值个数

在这个题目里面,就是用身份证号对应位的值与权重对应位的值相乘然后全部相加

下面直接看看代码

代码

#include <stdio.h>

int main()
{
    int num[17] = {7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};//权重
    char m[11] = {'1','0','X','9','8','7','6','5','4','3','2'};//校验值
    
    int n,i,t = 0,j,stop = 0;
    scanf("%d",&n);//输入个数
    char number[18];//身份证号
    for(i = 0;i < n;i++)
    {
        t = 0;
        scanf("%s",&number);//输入身份证号
        for(j = 0;j < 17;j++)
            t += (number[j]-'0')*num[j];//加权求和
        t %= 11;//对11取模
        if(m[t] != number[17])//判断是否一样,不一样直接输入,一样就跳过
        {
             stop = 1;   //防止下面输出All passed  ,校验
            printf("%s\n",number);
        }        
    }if(stop == 0)printf("All passed");
}

以上所有代码均为自己编写,本人水平有限,如果有哪里出错或者有更好的解法可以与我私信或在评论区里进行讨论

上一题:团体程序设计天梯赛-练习集——L1-015 跟奥巴马一起画方块

下一题:团体程序设计天梯赛-练习集——L1-017 到底有多二


http://www.kler.cn/a/517657.html

相关文章:

  • 数据结构与算法再探(六)动态规划
  • 【Linux】IPC:匿名管道、命名管道、共享内存
  • 数据结构(四) B树/跳表
  • vim的多文件操作
  • Synology 群辉NAS安装(4)docker-compose
  • 【Linux】21.基础IO(3)
  • java —— 面向对象(上)
  • [Dialog屏幕开发] 屏幕绘制(Table Control控件)
  • 为什么IDEA提示不推荐@Autowired❓️如果使用@Resource呢❓️
  • K8S中ingress详解
  • 数据结构测试题1
  • DeepSeek-R1:将强化学习用于激励大型语言模型的推理能力
  • 设计模式:春招面试的关键知识储备
  • ubunut22.04安装docker(基于阿里云 Docker 镜像源安装 Docker)
  • mapbox加载geojson,鼠标移入改变颜色,设置样式以及vue中的使用
  • web前端8--浮动
  • Python面向对象编程:精雕细琢对象的“名片”——重写 `__str__()` 和 `__repr__()` 方法
  • 【函数题】6-1 单链表逆转
  • 三高“高性能、高并发、高可靠”系统架构设计系列文章
  • 计算机视觉之三维重建-单视几何
  • jenkins-通过api获取所有job及最新build信息
  • hedfs和hive数据迁移后校验脚本
  • Rust 中的引用与借用:深入理解所有权与数据安全
  • 多模态数据融合的基本流程与关键环节
  • elementPlus-button组件二次封装
  • LlamaV-o1:重塑大型语言模型中的逐步视觉推理