1.
输入身份证号,通过计算比较校验位来判断身份证号是否正确。
如,aaaaaayyyymmddxxsp共18位,其中:
年份代码yyyy共4位。最后一位p为校验位。
校验规则是:
- 对前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 - 计算模 Y=mod(S,11)
- 通过模得到对应的校验码
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
#include <iostream>
#include <string>
using namespace std;
int main()
{
int wei[] = { 7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2 };
char p[] = { '1','0', 'X', '9', '8', '7', '6', '5', '4', '3', '2' };
string num;
while (cin >> num) {
int total = 0, i;
for (i = 0; i < num.length() - 1; i++)
total += (num[i]-'0') * wei[i];
if (p[total % 11] == num[i])
cout << num << " 正确" << endl;
else
cout << "应为: " << num.substr(0, 17) << p[total % 11] << endl;
}
}
2.
显示出如下数组中的所有元素,并使用二分查找法在数组中查找元素。
int a[]={-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个元素,比较次数为4
请输入所要查找的元素:6
输出:查找失败 比较次数为3
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int bi_search(int a[], int begin, int end, int value,int &cmp)
{
if (begin > end)
return -1;
int m = (begin + end) / 2;
cmp++;
if (a[m] > value)
bi_search(a, begin, m - 1, value, cmp);
else if (a[m] < value)
bi_search(a, m + 1, end, value, cmp);
else
return m;
}
int main()
{
int a[] = { -90,-32,12,16,24,36,45,59,98,120 };
for (int i = 0; i < 10; i++)
cout << a[i] << ' ';
cout << "请输入要查找的元素: ";
int num, cmp;
while (cin >> num) {
cmp = 0;
int res = bi_search(a, 0, 9, num, cmp);
if (res == -1)
cout << "查找失败!比较次数为" << cmp << endl;
else
cout << "第" << res + 1 << "个元素!比较次数为" << cmp << 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: zhanger score:68 40 99
*name: wangwu score:52 70 100
[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 99
和2016年第一题几乎一样,就不写了