2016复试题目

1.问题描述
  小明的公司每个月给小明发工资,而小明拿到的工资为交完个人所得税之后的工资。假设他一个月的税前工资(扣除五险一金后、未扣税前的工资)为S元,则他应交的个人所得税按如下公式计算:
  1) 个人所得税起征点为3500元,若S不超过3500,则不交税,3500元以上的部分才计算个人所得税,令A=S-3500元;
  2) A中不超过1500元的部分,税率3%;
  3) A中超过1500元未超过4500元的部分,税率10%;
  4) A中超过4500元未超过9000元的部分,税率20%;
  5) A中超过9000元未超过35000元的部分,税率25%;
  6) A中超过35000元未超过55000元的部分,税率30%;
  7) A中超过55000元未超过80000元的部分,税率35%;
  8) A中超过80000元的部分,税率45%;
  例如,如果小明的税前工资为10000元,则A=10000-3500=6500元,其中不超过1500元部分应缴税1500×3%=45元,超过1500元不超过4500元部分应缴税(4500-1500)×10%=300元,超过4500元部分应缴税(6500-4500)×20%=400元。总共缴税745元,税后所得为9255元。
  已知小明这个月税后所得为T元,请问他的税前工资S是多少元。
  
输入格式
  输入的第一行包含一个整数T,表示小明的税后所得。所有评测数据保证小明的税前工资为一个整百的数。
  
输出格式
  输出一个整数S,表示小明的税前工资。
  
样例输入
9255

样例输出
10000

#include<iostream>
using namespace std;
int main() {
	int t;
	double s;
	cin >> t;
	if (t <= 3500) s = t;
	else if (3500 < t && t <= 4955) {
		s = (t - 3500) * 100 / 97 + 3500;

	}
	else if (4955 < t && t <= 7655) {
		s = (t - 4955) * 100 / 90 + 5000;

	}
	else if (7655 < t && t <= 11255) {
		s = (t - 7655) * 100 / 80 + 8000;

	}
	else if (11255 < t && t <= 30755) {
		s = (t - 11255) * 100 / 75 + 12500;

	}
	else if (30755 < t && t <= 44755) {
		s = (t - 30755) / 0.7 + 38500;

	}
	else if (44755 < t && t <= 61005) {
		s = (t - 44755) * 100 / 65 + 58500;

	}
	else {
		s = (t - 61005) / 0.55 + 83500;

	}
	int temp = (int)s;
	cout << s << endl;
	return 0;
}

在这里插入图片描述

2.输入说明
输入第一行为四个整数n,m, t,k,整数之间用空格分隔。n表示矩阵行数(n<20),m表示矩阵列数(m<20),t表示矩阵被划分为t个矩形区域(0<t<50),k为其中某个区域的编号(1<=k<=t)。接下来是n行数据,每行m个整数,表示矩阵内各个元素所在的区域,整数之间用空格分隔。

输出说明
输出为一个整数,表示与k相邻的区域个数

输入样例
6 8 8 5
1 1 2 2 2 3 3 4
1 1 2 2 2 3 3 4
1 1 2 2 2 3 3 4
1 1 5 5 5 5 5 6
1 1 5 5 5 5 5 6
7 7 7 7 7 8 8 8

输出样例
6

#include<iostream>
using namespace std;
int main()
{
	int n, m, t, k;
	int square[20][20];
	int i, j, starti = -1, startj = -1, num[51] = { 0 }, sum = 0;//num表示 这个号有无出现,出现标1 
	cin>>n>>m>>t>>k;
	for (i = 0; i < n; i++)
	{
		for (j = 0; j < m; j++)
		{
			cin>>square[i][j];
			if (square[i][j] == k && starti == -1)
			{
				starti = i;
				startj = j;
			}
		}
	}
	i = starti;
	j = startj;
	for (i = starti; square[i][j] == k; i++)//该双重循环检查一个方块的上下左右情况
	{
		for (j = startj; square[i][j] == k; j++)
		{
			if (i - 1 >= 0)
				num[square[i - 1][j]] = 1;
			if (j - 1 >= 0)
				num[square[i][j - 1]] = 1;
			if (i + 1 < n)
				num[square[i + 1][j]] = 1;
			if (j + 1 < m)
				num[square[i][j + 1]] = 1;
		}
		j = startj;
	}
	for (i = 0; i < 51; i++)
	{
		sum += num[i];
	}
	if (num[k] == 1) sum--;
	cout << sum << endl;
	return 0;
}

在这里插入图片描述

此题复习

3.编写一个程序,定义一个存储整数的数组,输入n个整数(n≤1000),将这n个数存储在数组中,求这n个数的和并输出

【输入形式】
两行。第1行为整数n,n≤1000。第二行为n个整数。

【输出形式】
在“Total of array element values is ”后输出n个整数的和。

【样例输入】
12
1 3 5 4 7 2 99 16 45 67 89 45

【样例输出】
Total of array element values is 383

#include<iostream>
using namespace std;
int main()
{
	int n, arr[10000],sum=0,num;
	cin >> n;
	for (int i = 0; i < n; i++)
	{
		cin >> num;
		sum += num;
	}
	cout << "Total of array element values is " << sum << endl;
	return 0;
}

在这里插入图片描述
4.题目一描述:
编写一个程序,从键盘输入n个非零整数(0<n<1000),将这n个数中各位数字取出来相加,并按照从小到大的次序依次输出这些数字的和。例如,497的各位数字和为20(4+7+9),1069的各位数字和为16(1+0+6+9)。

输入格式说明:输入的整数之间以空格分隔,输入为0时结束。

输出格式说明:在一行上从小到大输出计算结果,整数之间用1个空格分隔,最后换行。

输入实例:
497 1069 68 71 137 0

输出实例:
8 11 14 16 20

#include<iostream>
#include<algorithm>
using namespace std;
int sum(int n)
{
	int add = 0;
	while (n)
	{
		add += n % 10;
		n = n / 10;
	}
	return add;
}
int main()
{
	int num,arr[1005],i=0,he[1005];
	while (cin >> num)
	{
		if (num == 0)
			break;
		else
		{
			arr[i] = num;
			i++;
		}
	}	
	for (int j = 0; j < i; j++)
	{
		he[j] = sum(arr[j]);
	}
	sort(he, he + i);
	for (int j = 0; j < i; j++)
		cout << he[j] << " ";
	return 0;
}

在这里插入图片描述
5.问题描述
有一种简单的字符串压缩算法,对于字符串中连续出现的同一个英文字符,用该字符加上连续出现的次数来表示(连续出现次数小于3时不压缩)。
例如,字符串aaaaabbbabaaaaaaaaaaaaabbbb可压缩为a5b3aba13b4。
请设计一个程序,将采用该压缩方法得到的字符串解压缩,还原出原字符串并输出。

输入说明
输入数据为一个字符串(长度不大于50,只包含字母和数字),表示压缩后的字符串

输出说明
在一行上输出解压缩后的英文字符串(长度不超过100),最后换行。

输入样例
a5b3aba13b4

输出样例
aaaaabbbabaaaaaaaaaaaaabbbb

#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
	int i = 0, sum, count, k;
	char s[50];
	cin >> s;
	while (s[i])
	{
		cout<<s[i];		//只要是字母,就先打印出来一个 
		i++;
		sum = 0; count = 0;
		while (s[i] >= '0' && s[i] <= '9')		//检查字母后是否有数字 
		{
			sum = sum * 10 + s[i] - '0';
			i++;
			count++;
		}
		for (k = 0; k < sum - 1; k++)	//再打印 (数字-1)个 
			cout<<s[i - count - 1];		//注意i已变动 
	}
	return 0;
}

在这里插入图片描述

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值