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;
}