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