第一题
找中间的数字,左右两个指针即可
100分代码如下:
int main() {
int n;
scanf("%d", &n);
int list[1010];
for (int i = 0; i < n; i++) {
scanf("%d", &list[i]);
}
sort(list, list + n);
int res = -1;
for (int i = 0; i < n; i++) {
int curr = list[i];
int l = 0, r = 0;
for (int j = 0; j < n; j++) {
if (list[j] > curr)
l++;
else if (list[j] < curr)
r++;
}
if (l == r)
res = curr;
}
cout << res;
return 0;
}
第二题
用税后工资反求工资,没想出正向算的方法,感觉好麻烦,直接硬着头笔枚举了。。。
没拿到满分,90分代码如下:
/*
1500元3% ;
1500元4500元税率10 % ;
4500元9000元税率20 % ;
9000元35000元税率25 % ;
35000元55000元税率30 % ;
55000元80000元税率35 % ;
80000元+税率45 % ;
*/
const int N = 200000;
int main() {
int n;
scanf("%d", &n);
int fd[8] = { 0,1500,4500,9000,35000,55000,80000, 200000 };
float sl[8] = { 0,0.03,0.1,0.2,0.25,0.30,0.35, 0.45 };
int ms[7];
ms[0] = 0;
for (int i = 1; i < 7; i++) {
ms[i] = (fd[i] - fd[i - 1]) * sl[i];
}
for (float sal = 0; sal <= N; sal++) {
float s = 0;
for (int i = 1; i <= 7; i++) {
if (sal > 3500 + fd[i - 1] && sal < 3500 + fd[i]) {
for (int j = 0; j < i; j++) {
s += ms[j];
}
s += (sal - (3500 + fd[i - 1])) * sl[i];
}
}
if ((sal - s) == n)
cout << sal;
}
}
int sal, res;
int fd[] = { 1500,4500,9000,35000,55000,80000 };
int sl[] = { 0.03,0.1,0.2,0.25,0.30,0.35, 0.45 };
scanf("%d", &sal);
for (int i = 0; i <= 100000; i++) {
int s = 0;
if (i > 3500) {
s = (i - 3500) * 0.03;
}
if(i > )
}
float sal, cp, s = 0, payed = 0;
scanf("%f", &sal);
cp = sal;
if (sal > 3500) {
sal -= 3500 ;
//payed += 3500;
s += sal / (1 - 0.03) - sal;
}
if (sal > 1500) {
sal -= 1500;
s += sal / (1 - 0.1 + 0.03) - sal;
}
if (sal > 3000) {
sal -= 3000;
s += sal / 0.9 - sal;
}
if (sal > 4500) {
sal -= 4500;
s += sal / 0.95 - sal;
}
if (sal > 26000) {
sal -= 26000;
s += sal / 0.95 - sal;
}
if (sal > 20000) {
sal -= 20000;
s += sal / 0.95 - sal;
}
if (sal > 25000) {
sal -= 25000;
s += sal / 0.90 - sal;
}
cout << cp + s;
第三题
求用户的权限,全套模拟,注意遇到稍复杂的部分都用全局变量