北理工计算机考研复试上机2017年真题

1、输入身份证号,通过计算比较校验位来判断身份证号是否正确。最后一位 p 为校验位。

校验规则是:

(1)对前 17 位数字的权求和 S=Sum(Ai*Wi),i=0,...,16

Ai:表示第 i 位置上的身份证号码数字值

Wi:表示第 i 位置上的加权因子

Wi:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2

(2)计算模 Y=mod(S,11)

(3)通过模得到对应的校验码

Y:0 1 2 3 4 5 6 7 8 9 10

校验码:1 0 X 9 8 7 6 5 4 3 2

例如,如果得到 Y 为 9 则最后的校验位 p 应该为 3

如果校验位不是 3,则该身份证号码不正确。

输入示例:

110130197606175317

输出示例:

110130197606175317 正确.

输入示例:

110200197501175220

输出示例:

应为:11020019750117522X

代码:

cpp 复制代码
#include <bits/stdc++.h>

using namespace std;

int wei[] = {7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
pair<int,char> y[] = {{0,'1'}, {1,'0'}, {2,'X'}, {3,'9'}, {4,'8'}, {5,'7'}, 
{6,'6'},{7,'5'},{8,'4'}, {9,'3'},{10,'2'}};
int main()
{
	string sfz;
	cin >> sfz;
	int sum = 0;
	for (int i = 0; i < 17; i++) {
		sum += wei[i]*(sfz[i] - '0');
	}
	int mmod = sum % 11;
	if (sfz[17] == y[mmod].second) {
		cout << sfz << ' ' << "正确" << endl;
	} else {
		cout << "应为: " << sfz.substr(0,17) << y[mmod].second << endl;
	}
	return 0;
}

2、显示出如下数组中的所有元素,并使用二分查找法在数组中查找元素。

int a\[\]={-90,-32,12,16,24,36,45,59,98,120};

输入:

-90 -32 12 16 24 36 45 59 98 120

输出:

-90 -32 12 16 24 36 45 59 98 120

请输入所要查找的元素: 24

第5个元素为24,比较次数为1

请输入所要查找的元素: 120

第10个元素为120,比较次数为4

请输入所要查找的元素: 6

查找失败,比较次数为3

代码:

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
    vector<int> a;
    int x;
    while (cin >> x) {
        a.push_back(x);
        if (getchar() == '\n') break;
    }

    for (auto it : a) 
        cout << it << ' ';
    cout << endl;
    while(true) {
        int cnt = 0;
        cout << "请输入要查找的元素:";
        int tar;
        cin >> tar;
        int l = 0, r = 9;
        bool flag = false;
        while (l <= r) {
            cnt++;
            int mid = l+r >> 1;
            if (a[mid] == tar) {
                flag = true; // 找到了
                // cout << mid+1 << ' ' << cnt << endl;
                cout << "第" << mid+1 << "个元素为" << tar << ",比较次数" << cnt << endl;
                break;
            } else if (a[mid] < tar) l = mid+1;
            else if (a[mid] > tar) r = mid-1; 
        }
        if(!flag) {
            cout << "查找失败,比较次数为" << cnt << endl;
        }
    }
}   

3、输入学生个数以及每个学生的姓名和 3 门课程成绩:输出不及格学生的信息;按平均 成绩排序,从高到低输出学生信息。

输入:

5

zhaoyi 70 80 91

zhanger 68 40 90

zhangsan 60 70 80

lisi 70 80 90

wangwu 52 70 100

输出:

*name:wangwu score:52 70 100

*name:zhanger score:68 40 90

1 name:zhaoyi 70 80 91

2 name:lisi 70 80 90

3 name:wangwu 52 70 100

4 name:zhangsan 60 70 80

5 name:zhanger 68 40 90

代码:

cpp 复制代码
#include <bits/stdc++.h>

using namespace std;

struct student{
	char name[100];
	int c1,c2,c3;
	double avg;
};
bool cmp(student s1, student s2) {
	return s1.avg > s2.avg;
}
int main()
{
	vector<student> stu;
	int n;
	cin >> n;
	for (int i = 0; i < n; i++) {
		struct student s;
		cin >> s.name >> s.c1 >> s.c2 >> s.c3;
		s.avg = 1.0 * (s.c1 + s.c2 + s.c3) / 3;
		stu.push_back(s);
	}
	for (int i = 0; i < n; i++) {
		// 不及格输出
		if (stu[i].c1 < 60 || stu[i].c2 < 60 || stu[i].c3 < 60) {
			printf("*name: %s\tscore:%d\t%d\t%d\n",stu[i].name,stu[i].c1,stu[i].c2,stu[i].c3);
		}
	}
	sort(stu.begin(), stu.end(), cmp);
	for (int i = 0; i < n; i++) {
		printf("[%d] name:%s\t%d\t%d\t%d\n",i+1,stu[i].name,stu[i].c1,stu[i].c2,stu[i].c3);
	}	
	return 0;
}
相关推荐
酉鬼女又兒15 天前
零基础入门计算机网络运输层:端到端通信核心作用、端口号分类规则、复用分用工作机制及UDP与TCP协议全方位对比详解
网络·网络协议·tcp/ip·计算机网络·考研·udp·php
小马哥crazymxm16 天前
Arxiv论文周选 (2026-W24)
论文阅读·人工智能·考研
酉鬼女又兒17 天前
零基础入门计算机网络网际层核心:IP数据报发送与转发完整流程、静态路由配置方法、路由环路成因与解决方案及历年考研经典例题深度解析
网络·tcp/ip·计算机网络·考研·职场和发展
酉鬼女又兒17 天前
零基础入门IPv4地址:从基本概念、分类编址、子网划分到无分类编址与应用规划全解
网络·网络协议·计算机网络·考研·职场和发展·分类·智能路由器
killerbasd18 天前
总结 6.13
考研
05候补工程师19 天前
【408考研复习】数据结构核心笔记:字符串模式匹配与内部排序算法全解析
数据结构·经验分享·笔记·考研·算法·排序算法
乘~风19 天前
408考研-计组-1.2计算机系统层次结构笔记+1.3计算机性能指标
笔记·考研·408
killerbasd20 天前
总结 6.11
考研
唐维康20 天前
F00403综合程序设计考什么?昆工891复试全流程拆解
考研
2601_9618454220 天前
高考真题试卷电子版|2025高考全科试卷分类下载
考研·面试·蓝桥杯·远程工作·程序员创富·高考