思考:如何更好更快的答题?
1
2
3
4
5
6
7
8
9
10
| 利息计算
开平方
最小公倍数
求日期差
字符串的轮换
金字塔
中奖计算
程序设计:串的处理
程序设计:画表格
程序设计:5个砝码 |
利息计算
开平方
最小公倍数
求日期差
字符串的轮换
金字塔
中奖计算
程序设计:串的处理
程序设计:画表格
程序设计:5个砝码
利息计算
1
2
3
4
5
| /*
参考答案:money * 1.03
也可以是逻辑等价:
money + money * 3 / 100;
*/ |
/*
参考答案:money * 1.03
也可以是逻辑等价:
money + money * 3 / 100;
*/
开平方
最小公倍数
1
2
3
4
5
6
| /*
参考答案:i+=a
或者 i = i + a;
注意:i++
虽然可以得到正确结果,但不符题意(高效运行),不给分。
*/ |
/*
参考答案:i+=a
或者 i = i + a;
注意:i++
虽然可以得到正确结果,但不符题意(高效运行),不给分。
*/
求日期差
1
2
3
| /*
参考答案:x.month-1
*/ |
/*
参考答案:x.month-1
*/
字符串的轮换
1
2
3
4
5
6
7
8
| /*
参考答案:
空1: len+1 (2分)
空2: 0 (5分)
空1:strlen(s) + 1 是一样的
空2:'\0' (char)0 NULL 是一样的
其它未知的都代入程序试验一下
*/ |
/*
参考答案:
空1: len+1 (2分)
空2: 0 (5分)
空1:strlen(s) + 1 是一样的
空2:'\0' (char)0 NULL 是一样的
其它未知的都代入程序试验一下
*/
金字塔
1
2
3
4
5
6
7
| /*
参考答案:
空1: h(space+1, x-1) (6分)
空2: x-i (3分)
(char)((int)x-i) 当然也是可以的
如不能确定,需要代入程序运行实验
*/ |
/*
参考答案:
空1: h(space+1, x-1) (6分)
空2: x-i (3分)
(char)((int)x-i) 当然也是可以的
如不能确定,需要代入程序运行实验
*/
中奖计算
1
2
3
4
5
6
7
| /*
参考答案:
空1:sa[i+j] (4分)
空2:n = j (8分)
注意sa[i+j] 的多种表达法:
*(sa+i+j)
*/ |
/*
参考答案:
空1:sa[i+j] (4分)
空2:n = j (8分)
注意sa[i+j] 的多种表达法:
*(sa+i+j)
*/
程序设计:串的处理
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| 输出:A
积分:1
输入:6a
输出:6_a
积分:1
输入:a6
输出:A_6
积分:1
输入:this is a k47coat
输出:This Is A K_47_coat
积分:5
输入:50cat do60 s1t2k30
输出:50_cat Do_60 S_1_t_2_k_30
积分:5 |
输出:A
积分:1
输入:6a
输出:6_a
积分:1
输入:a6
输出:A_6
积分:1
输入:this is a k47coat
输出:This Is A K_47_coat
积分:5
输入:50cat do60 s1t2k30
输出:50_cat Do_60 S_1_t_2_k_30
积分:5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| #include <stdio.h>
int main(int argc, char *argv[])
{
char c;
int space=1, letter=0, digit=0;
while ((c=getchar())!=EOF) {
if (space && isalpha(c))
putchar(c+'A'-'a');
else if ((digit && isalpha(c)) || (letter && isdigit(c)) ) {
putchar('_'); putchar(c);
} else if (space && isspace(c)) {
} else putchar(c);
space = isspace(c); letter = isalpha(c); digit = isdigit(c);
}
return 0;
} |
#include <stdio.h>
int main(int argc, char *argv[])
{
char c;
int space=1, letter=0, digit=0;
while ((c=getchar())!=EOF) {
if (space && isalpha(c))
putchar(c+'A'-'a');
else if ((digit && isalpha(c)) || (letter && isdigit(c)) ) {
putchar('_'); putchar(c);
} else if (space && isspace(c)) {
} else putchar(c);
space = isspace(c); letter = isalpha(c); digit = isdigit(c);
}
return 0;
}
程序设计:画表格
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
| 输入:
1
a
输出:
+-+
|a|
+-+
积分:1
输入:
1
ab,,c,def
输出:
+--++-+---+
|ab||c|def|
+--++-+---+
积分:2
输入:
3
a
bcd
e
输出:
+---+
|a |
+---+
|bcd|
+---+
|e |
+---+
积分:2
输入:
3
a,,b,c
cat dog,this,,time
that,,,is
输出:
+-------+----+-+----+
|a | |b|c |
+-------+----+-+----+
|cat dog|this| |time|
+-------+----+-+----+
|that | | |is |
+-------+----+-+----+
积分:6
输入:
4
a
,bb
,,ccc
,,,dddd
输出:
+-+--+---+----+
|a| | | |
+-+--+---+----+
| |bb| | |
+-+--+---+----+
| | |ccc| |
+-+--+---+----+
| | | |dddd|
+-+--+---+----+
积分:6 |
输入:
1
a
输出:
+-+
|a|
+-+
积分:1
输入:
1
ab,,c,def
输出:
+--++-+---+
|ab||c|def|
+--++-+---+
积分:2
输入:
3
a
bcd
e
输出:
+---+
|a |
+---+
|bcd|
+---+
|e |
+---+
积分:2
输入:
3
a,,b,c
cat dog,this,,time
that,,,is
输出:
+-------+----+-+----+
|a | |b|c |
+-------+----+-+----+
|cat dog|this| |time|
+-------+----+-+----+
|that | | |is |
+-------+----+-+----+
积分:6
输入:
4
a
,bb
,,ccc
,,,dddd
输出:
+-+--+---+----+
|a| | | |
+-+--+---+----+
| |bb| | |
+-+--+---+----+
| | |ccc| |
+-+--+---+----+
| | | |dddd|
+-+--+---+----+
积分:6
完整程序如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
| #include <stdio.h>
#define MAX_LINES 30
#define MAX_COL 40
int getColNumber(char s[])
{
int n=1;
char *p=s;
while (*p) {
if (*p==',') n++;
p++;
}
return n;
}
void scanLine(char s[], int a[])
{
char *p = s;
int n = 0, i=0;
while (*p!='\0') {
if (*p!=',') n++;
else n=0, i++;
if (n>a[i]) a[i] = n;
p++;
}
}
void printLine(char s[], int a[], int col)
{
char *p = s;
char word[MAX_COL][100];
int i=0, j=0, k;
while (*p!='\0') {
if (*p!=',') word[i][j++]=*p;
else {
word[i][j]='\0';
i++, j=0;
}
p++;
}
word[i][j] = '\0';
putchar('|');
for (i=0; i<col; i++) {
printf("%s", word[i]);
for (j=0; j<a[i]-strlen(word[i]); j++)
putchar(' ');
putchar('|');
}
printf("\n");
}
void printPlusLine(int a[], int col)
{
int i, j;
putchar('+');
for (i=0; i<col; i++) {
for (j=0; j<a[i]; j++) putchar('-');
putchar('+');
}
printf("\n");
}
int main(int argc, char *argv[])
{
int n, i, col=0;
int a[MAX_COL];
char lines[MAX_LINES][200];
for (i=0; i<MAX_COL; i++) a[i] = 0;
scanf("%d", &n); getchar();
for (i=0; i<n; i++)
gets(lines[i]), scanLine(lines[i], a);
for (i=0; i<n; i++)
if (getColNumber(lines[i])>col) col=getColNumber(lines[i]);
for (i=0; i<n; i++)
printPlusLine(a, col), printLine(lines[i], a, col);
printPlusLine(a, col);
return 0;
} |
#include <stdio.h>
#define MAX_LINES 30
#define MAX_COL 40
int getColNumber(char s[])
{
int n=1;
char *p=s;
while (*p) {
if (*p==',') n++;
p++;
}
return n;
}
void scanLine(char s[], int a[])
{
char *p = s;
int n = 0, i=0;
while (*p!='\0') {
if (*p!=',') n++;
else n=0, i++;
if (n>a[i]) a[i] = n;
p++;
}
}
void printLine(char s[], int a[], int col)
{
char *p = s;
char word[MAX_COL][100];
int i=0, j=0, k;
while (*p!='\0') {
if (*p!=',') word[i][j++]=*p;
else {
word[i][j]='\0';
i++, j=0;
}
p++;
}
word[i][j] = '\0';
putchar('|');
for (i=0; i<col; i++) {
printf("%s", word[i]);
for (j=0; j<a[i]-strlen(word[i]); j++)
putchar(' ');
putchar('|');
}
printf("\n");
}
void printPlusLine(int a[], int col)
{
int i, j;
putchar('+');
for (i=0; i<col; i++) {
for (j=0; j<a[i]; j++) putchar('-');
putchar('+');
}
printf("\n");
}
int main(int argc, char *argv[])
{
int n, i, col=0;
int a[MAX_COL];
char lines[MAX_LINES][200];
for (i=0; i<MAX_COL; i++) a[i] = 0;
scanf("%d", &n); getchar();
for (i=0; i<n; i++)
gets(lines[i]), scanLine(lines[i], a);
for (i=0; i<n; i++)
if (getColNumber(lines[i])>col) col=getColNumber(lines[i]);
for (i=0; i<n; i++)
printPlusLine(a, col), printLine(lines[i], a, col);
printPlusLine(a, col);
return 0;
}
程序设计:5个砝码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
| 输入:
1
输出:
1
积分:1
输入:
121
输出:
81+27+9+3+1
积分:2
输入:
20
输出:
27-9+3-1
积分:8
输入:
80
输出:
81-1
积分:8
输入:
41
输出:
81-27-9-3-1
积分:8
注意:
如果第一个数字前输出了符号,则扣2分(不同用例不重复扣分)
如果数字的顺序不对,则扣除3分(不同用例不重复扣分)
本题分数扣完为止。 |
输入:
1
输出:
1
积分:1
输入:
121
输出:
81+27+9+3+1
积分:2
输入:
20
输出:
27-9+3-1
积分:8
输入:
80
输出:
81-1
积分:8
输入:
41
输出:
81-27-9-3-1
积分:8
注意:
如果第一个数字前输出了符号,则扣2分(不同用例不重复扣分)
如果数字的顺序不对,则扣除3分(不同用例不重复扣分)
本题分数扣完为止。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
| #include <stdio.h>
#include <math.h>
int main(int argc, char *argv[])
{
int a[243][5];
int v[243];
int i, j, t, n;
int isFirst=1;
for (i=0; i<243; i++) {
t = i;
for (j=4; j>=0; j--) {
a[i][j] = t % 3-1;
t = t / 3;
}
}
for (i=0; i<243; i++)
v[i] = 81*a[i][4] + 27*a[i][3] +
9*a[i][2]+ 3*a[i][1] + 1*a[i][0];
scanf("%d", &n);
for (i=0; i<243; i++)
if (n==v[i]) {
for (j=4; j>=0; j--) {
if (a[i][j]==1) {
if (isFirst)
printf("%d", (int)pow(3, j)), isFirst=0;
else
printf("+%d", (int)pow(3, j));
}
if (a[i][j]==-1) printf("-%d", (int)pow(3, j));
}
isFirst=1;
printf("\n");
}
return 0;
} |
#include <stdio.h>
#include <math.h>
int main(int argc, char *argv[])
{
int a[243][5];
int v[243];
int i, j, t, n;
int isFirst=1;
for (i=0; i<243; i++) {
t = i;
for (j=4; j>=0; j--) {
a[i][j] = t % 3-1;
t = t / 3;
}
}
for (i=0; i<243; i++)
v[i] = 81*a[i][4] + 27*a[i][3] +
9*a[i][2]+ 3*a[i][1] + 1*a[i][0];
scanf("%d", &n);
for (i=0; i<243; i++)
if (n==v[i]) {
for (j=4; j>=0; j--) {
if (a[i][j]==1) {
if (isFirst)
printf("%d", (int)pow(3, j)), isFirst=0;
else
printf("+%d", (int)pow(3, j));
}
if (a[i][j]==-1) printf("-%d", (int)pow(3, j));
}
isFirst=1;
printf("\n");
}
return 0;
}