小南毕业工作了,他想知道自己每年的扣税情况。他查到的综合所得的个人所得税税率表如下:
级数
全年应纳税所得额
税率(%)
速算扣除数
1
不超过36000元的部分
3
0
2
超过36000-144000元的部分
10
2520
3
超过144000-300000元的部分
20
16920
4
超过300000-420000元的部分
25
31920
5
超过420000-660000元的部分
30
52920
6
超过660000-960000元的部分
35
85920
7
超过960000元的部分
45
181920
你能根据小南的收入算出他每年所要缴纳的税款吗?
输入
多个样例。每个样例输入一个整数m(104≤m≤107)代表小南的年终收入,为100的整数倍。
输出
每个样例输出一个整数,表示小南缴纳的个税。每个样例输出结果占一行。
样例输入 Copy
20000
36000
400000
660000
样例输出 Copy
600
1080
68080
145080
//#include
//int main()
//{
// long long m;
// while (~scanf("%lld", &m))
// {
// long long sum = 0;
// if (m >= 36000)
// {
// sum += 360 * 3;
// }
// else if(m<36000)
// {
// sum += m / 100 * 3;
// }
// if (m >= 144000)
// {
// sum += (144000 - 36000) / 100 * 10;
// }
// else if(m>36000)
// {
// sum += (m - 36000) / 100 * 10;
// }
// if (m >= 300000)
// {
// sum += (300000 - 144000) / 100 * 20;
// }
// else if (m >144000)
// {
// sum += (m - 144000) / 100 * 20;
// }
// if (m >= 420000)
// {
// sum += (420000 - 300000) / 100 * 25;
// }
// else if (m >300000)
// {
// sum += (m - 300000) / 100 * 25;
// }
// if (m >=660000 )
// {
// sum += (660000 - 420000) / 100 * 30;
// }
// else if (m >420000)
// {
// sum += (m - 420000) / 100 * 30;
// }
// if (m >= 960000)
// {
// sum += (960000 - 660000) / 100 * 35;
// }
// else if (m > 660000)
// {
// sum += (m - 660000) / 100 * 35;
// }
// if (m > 960000)
// {
// sum += (m - 960000) / 100 * 45;
// }
// printf("%lld\n", sum);
// }
// return 0;
//}
[命题人 : 外部导入]
时间限制 : 1.000 sec 内存限制 : 128 MB
题目描述
12小时制和24小时制都是一种记录时间的方式,两者的区别在于:
(1)12小时制是把一天二十四小时分为上午和下午两个十二小时的时间段,上午从午夜12:00到上午11:59,后缀标记am或者AM,下午从正午12:00到晚上11:59,后缀标记pm或者PM。
(2)24小时制是把一天二十四个小时从午夜开始用00:00~23:59表示。
(3)使用12小时制显示时间时中午12点显示为12:00 pm或者12:00 PM,而将午夜显示为12:00 am或者12:00 AM。
小南的任务:将12小时制格式显示的时间转换为24小时制格式显示。
输入
多个样例。每个样例输入1行形式为hh:mmcd的数据,其中整数hh(00≤hh≤12)代表小时,整数mm(00≤mm≤59)代表分钟,cd是字母组合“am、AM、pm、PM”中的一个,分别表示上午(am或AM)和下午(pm或者PM)。
输出
每个样例输出新的24小时制格式的时间,形式为hh:mm。每个样例输出结果占一行。
样例输入 Copy
12:00am
12:59PM
11:09pm
03:02AM
04:18PM
样例输出 Copy
00:00
12:59
23:09
03:02
16:18
//#include
//int main(void)
//{
// int hh, mm, h, m;
// char a, s;
// while (~scanf("%d:%d%c%c", &hh, &mm, &a, &s))
// {
// if (a == 'a'||a=='A')
// {
// h = hh % 12;
// m = mm;
// }
// else
// {
// if (hh == 12)
// h=hh;
// else
// h = hh + 12;
// m = mm;
// }
// printf("%.2d:%.2d\n", h, m);
// }
// return 0;
//}
[命题人 : 外部导入]
时间限制 : 1.000 sec 内存限制 : 128 MB
题目描述
老师发现很多学生在进行加法的时候,发现“进位”特别容易出错。于是交给小南一个任务,就是统计两个整数x和y在相加时需要多少次进位,其中x和y满足0≤x,y≤ 109,你能帮他完成任务吗?
输入
多个样例。 每个样例输入1行,包括2个整数x和y(0≤x,y≤ 109)。
输出
每个样例输出一个整数,代表所需要的进位数。每个样例输出结果占一行。
样例输入 Copy
8 7
9 0
154 246
555 5555
123 594
样例输出 Copy
1
0
2
3
1
//#include
//int main()
//{
// long long x, y;
// while (~scanf("%lld %lld", &x, &y))
// {
// long sum = 0;
// int weihe = 0;
// while (x || y)
// {
// weihe += x % 10 + y % 10;
// if (weihe>= 10)
// {
// sum++;
// weihe = 1;
// }
// else
// {
// weihe = 0;
// }
// x /= 10; y /= 10;
// }
// printf("%ld\n", sum);
// }
// return 0;
//}
[命题人 : 外部导入]
时间限制 : 1.000 sec 内存限制 : 128 MB
题目描述
小南最近喜欢上了魔方,设计了一个平面魔方。平面魔方是一个n×n(2≤n≤ 10)的矩阵,最开始用数据1~n2填充。魔方的操作指令集如下:
(1)指令1:“L x y”表示矩阵的第x行循环左移y次;
(2)指令2:“R x y”表示矩阵的第x行循环右移y次;
(3)指令3:“U x y”表示矩阵的第x列循环上移y次;
(4)指令4:“D x y”表示矩阵的第x列循环下移y次;
其中矩阵的行号和列号x从1开始编号,满足1≤x≤n;移动次数y满足1≤y≤n−1。
说明:5个数据a1,a2,a3,a4,a5循环左移1次会变成a2,a3,a4,a5,a1。
要求:对给定的初始魔方,经过若干次操作后形成新的魔方,按行将新魔方的所有数字输出在一行上,数字之间用一个空格分开,行首和行末无空格。
输入
多个样例。每个样例输入包含1+m行:
第1行输入两个整数n(2≤n≤10)和m(1≤m≤100),分别表示矩阵的大小和指令的条数。
接下来的m行是m条指令,输入格式为“C x y”,字母C(L或R或U或D)代表移动的方向,整数x(1≤x≤n)代表移动的行或列号,y(1≤y≤n−1)代表移动次数。
输出
对于每个样例,按行输出新魔方的所有数字。每个样例结果输出占一行。
样例输入 Copy
3 1
L 1 1
3 1
R 1 1
3 1
U 1 1
3 1
D 1 1
4 3
L 3 1
U 2 2
R 4 3
样例输出 Copy
2 3 1 4 5 6 7 8 9
3 1 2 4 5 6 7 8 9
4 2 3 7 5 6 1 8 9
7 2 3 1 5 6 4 8 9
1 11 3 4 5 14 7 8 10 2 12 9 6 15 16 13
//#include
//int main(void)
//{
// int n, m;
// while (~scanf("%d %d", &n, &m))
// {
// int juzheng[10][10] = { 0 }; int mm = 0;
// int* p = (&(juzheng[0][0]));
// for (int i = 0; i <= n - 1; i++)
// {
// for (int j = 0; j <= n - 1; j++)
// {
// juzheng[i][j] = (++mm);
// }
// }
// for (int zhiling = 1; zhiling <= m; zhiling++)
// {
// char lrud; int roworcol; int ci;
// scanf(" %c %d %d", &lrud, &roworcol, &ci);
// {
// roworcol--;
// if (lrud == 'L')
// {
// while (ci--)
// {
// int temp = juzheng[roworcol][0];
// for (int ccc = 0; ccc <= n - 2; ccc++)
// {
// juzheng[roworcol][ccc] = juzheng[roworcol][ccc + 1];
// }
// juzheng[roworcol][n - 1] = temp;
// }
// }
// else if (lrud == 'R')
// {
// while (ci--)
// {
// int temp = juzheng[roworcol][n - 1];
// for (int ccc = n - 1; ccc > 0; ccc--)
// {
// juzheng[roworcol][ccc] = juzheng[roworcol][ccc - 1];
// }
// juzheng[roworcol][0] = temp;
// }
// }
// else if (lrud == 'U')
// {
// while (ci--)
// {
// int temp = juzheng[0][roworcol];
//
// for (int ccc = 0; ccc <= n - 2; ccc++)
// {
// juzheng[ccc][roworcol] = juzheng[ccc + 1][roworcol];
// }
// juzheng[n - 1][roworcol] = temp;
// }
// }
// else if (lrud == 'D')
// {
// while (ci--)
// {
// int temp = juzheng[n - 1][roworcol];
// for (int ccc = n - 1; ccc > 0; ccc--)
// {
// juzheng[ccc][roworcol] = juzheng[ccc - 1][roworcol];
// }
// juzheng[0][roworcol] = temp;
// }
// }
// }
// }
// for (int i = 0; i <= n - 1; i++)
// {
// for (int j = 0; j <= n - 1; j++)
// {
// if(j!=n-1||i!=n-1)
// printf("%d ", juzheng[i][j]);
// else
// printf("%d\n", juzheng[i][j]);
// }
//
// }
// }
//}
[命题人 : 外部导入]
时间限制 : 1.000 sec 内存限制 : 128 MB
题目描述
小南想要绘制一个金字塔。金字塔的图案由正三角形和倒三角形堆叠而成,共计n个。具体的绘制方法如下:
(1)每个三角形由*,/,\和-组成,分别代表三角形的顶点和三条边。
(2)第一行只包含一个正三角形,其余各行的三角形按照“正三角形、倒三角形、正三角形、倒三角形,……”的顺序排列。
(3)除最后一行外,每一行的三角形比上一行多2个。
例如,不同的n值对应的图案如下:
金字塔中三角形的个数n定为多少好呢?小南想到一个有趣的斐波那契数列(Fibonacci sequence),其值从第0项开始依次为1,1,2,3,5,8,13,21,34,55,89,…。小南让老师给出一个正整数x,然后在斐波那契数列中找到不小于x的最小的斐波那契数对应的位置作为n,你能根据老师给出的x,帮小南编写程序绘制出相应的金字塔图案吗?(说明:斐波那契数列中1的位置为1,2的位置为2,3的位置为3,5 的位置为4,以此类推。)
输入
多个样例。每个样例输入一个正整数x(1≤x≤105),表示老师给出的正整数。
输出
对于每个样例输出对应的图案,注意每行的末尾没有多余的空格。
样例输入 Copy
1
2
3
15
样例输出 Copy
*
/
—
*
/
—
/
—
*
/
—
/ \ /
—
*
/
—
/ \ /
——*
/ \ /
——*
#include
#include
int findnum(int);
int arr[50] = { 1,1 };
int main(void)
{
for (int i = 2; i <= 49; i++)。
{
arr[i] = arr[i - 1] + arr[i - 2];
}
int x;
while (~scanf("%d", &x))
{
int num = findnum(x);
int guanghangshu = (int)(sqrt(num ));
//diyihang
int extra = num - guanghangshu * guanghangshu;
if (extra == 0) guanghangshu--;
for (int i = 1; i <= 2 * (guanghangshu+1); i++)
{
printf(" ");
}
printf("*");
printf("\n");
for (int i = guanghangshu; i >= 1; i--)
{
for (int m = 1; m <= 2 * i; m++)
{
printf(" ");
}
int b = guanghangshu - i + 1;
int ff = b;
while (b--)
{
printf(" / \\");
}
printf("\n");
for (int m = 1; m <= 2 * i ; m++)
{
printf(" ");
}
while (ff--)
{
printf("*---");
}
printf("*");
printf("\n");
}
extra = num - guanghangshu * guanghangshu;
int temp = extra;
if (extra >= 1)
{
printf(" /");
for (int i = 1; i <= extra; i++)
{
if (i % 2 == 1)
printf(" \\");
else
printf(" /");
}
printf("\n");
extra = (extra + 1) / 2;
while (extra--)
{
printf("*---");
}
printf("*");
printf("\n");
}
}
}
int findnum(int num)
{
int i = 1;
for (; arr[i] <num; i++)
;
return i;
}
格式错误可能是前面或者后面多输出了空格或者换行符。
写程序脑子要清晰,考虑所有情况
[命题人 : 外部导入]
时间限制 : 1.000 sec 内存限制 : 128 MB
题目描述
小南想要同学们送一幅数字画作为生日礼物,他给你一块画布(600X600)并设定了以下规则来让你画数字画:
(1)将画布用数字0填充。
(2)在画布中间位置的某个点(x0,y0)开始绘制一个边数为n的逆时钟螺旋线,一开始方向向右,边长依次为第i个素数(i=1,2,3,…,n),即2,3,5,7,11,…。使用数字1表示横线,数字2表示竖线。
(3)画完后按照螺旋线边界裁掉多余的画布形成一个矩形数字画。例如,当n为5时,相应的数字画为:
要求:对于给定的n(1≤n≤50),输出最终的数字画。
输入
多个样例。 每个样例输入一行包含一个n(1≤n≤50),表示数字画中逆时钟螺旋线的边数。
输出
每个样例按照要求输出一个正确的矩阵图形。每两个样例的输出结果之间用一个空行分开。
样例输入 Copy
1
2
3
样例输出 Copy
11
02
02
02
11
111112
000002
000002
000011
int huabu[1000][1000] = { 0 };
#include
int main(void)
{
int prime[51] = { 0 ,2 }; int m = 0,flag=1;
for ( int i = 2; m<50; i++)
{
flag = 1;
for (int x = 2; x * x <= i; x++)
{
if (i % x == 0)
{
flag = 0;
break;
}
}
if (flag)
prime[++m] = i;
}
int n;
while (~scanf("%d", &n))
{
int x = 500, y = 499;
huabu[500][500] = 1;
for (int i = 1; i <= n; i++)
{
if (i % 4 == 1)
{
for (int ci = 1; ci <= prime[i]; ci++)
{
huabu[x][++y] = 1;
}
}
else if(i%4==2)
{
for (int ci = 1; ci <= prime[i]; ci++)
{
huabu[--x][y] = 2;
}
}
else if (i % 4 == 3)
{
for (int ci = 1; ci <= prime[i]; ci++)
{
huabu[x][--y] = 1;
}
}
else if (i % 4 == 0)
{
for (int ci = 1; ci <= prime[i]; ci++)
{
huabu[++x][y] = 2;
}
}
}
int rowstart, rowend;
int colstart, colend;
if (n == 1)
{
printf("11\n\n");
continue;
}
else if (n == 2)
{
printf("02\n02\n02\n11\n\n");
continue;
}
if (n % 4 == 1)
{
rowstart = x - prime[n-1];
rowend = x;
colend = y;
colstart = y - prime[n];
}
else if (n % 4 == 2)
{
rowstart= x;
rowend = x + prime[n ];
colend = y ;
colstart = y-prime[n-1];
}
else if (n % 4 == 3)
{
rowend = x + prime[n-1];
rowstart = x;
colend = y+prime[n] ;
colstart = y;
}
else
{
rowend = x;
rowstart = x - prime[n ];
colstart = y ;
colend = y+prime[n-1];
}
for (int s = rowstart; s <= rowend; s++)
{
for (int a = colstart; a <= colend; a++)
{
printf("%d", huabu[s][a]);
}
printf("\n");
}
printf("\n");
}
return 0;
}
这个ac的相当心虚。样例可能给的全是先给小数,再给大数。也可以进行改正,比如每次进入循环之前,先置0将整个数组。
局部变量数组设置的不大可设置为全局变量。