卡在出线概率了。40%,没想到遍历时反了,我去。

1.时钟加法

题目描述

小南最近迷上了各种形式的加法,例如时钟加法,时钟加法是指给定一个当前时间,其形式为h:m:s,计算加上n秒后新的时间。你能帮他编程实现吗?



输入

多个样例。每个样例输入1行形式为h:m:s+n的数据,其中h(0≤h≤23)代表小时,m(0≤m≤59)代表分钟,s(0≤s≤59)代表秒钟,n(1≤n≤105)代表经过的秒数。

输出

每个样例输出新的时间,形式为h:m:s。每个样例输出结果占一行。

样例输入 Copy

0:0:0+360
23:29:59+1801
7:8:15+1

样例输出 Copy

00:06:00
00:00:00
07:08:16
 1 #include<stdio.h>
 2 
 3 #include<string.h>
 4 
 5 #include<stdlib.h>
 6 
 7 #include<math.h>
 8 #define CRT_SECURE_NO_WARNINGS
 9 
10 
11 void Print(int x) {
12 
13 
14     if (x < 10) {
15         printf("0%d", x);
16     }
17     else {
18         printf("%d", x);
19     }
20 
21 
22 }
23 
24 int main()
25 {
26     int a;
27     int b; 
28     int c;
29     int n;
30     while (scanf("%d:%d:%d+%d", &a,&b,&c,&n) != EOF) {
31 
32 
33         int t = a * 3600 + b * 60 + c * 1 + n;
34         //printf("t=%d\n", t);
35         if (t == 86400) {
36             printf("00:00:00\n");
37         }
38         else {
39 
40 
41 
42             int r1 = t / 3600;
43             r1 %= 24;
44             int m2 = t % 3600;
45 
46             int r2 = m2 / 60;
47             
48             int m3 = m2 % 60;
49 
50             int r3 = m3;
51 
52             Print(r1);
53             printf(":");
54 
55             Print(r2);
56             printf(":");
57 
58             Print(r3);
59             printf("\n");
60 
61 
62         }
63 
64         
65 
66     }
67 
68     return 0;
69 }

2.卡牌排序

题目描述

小南有一个习惯,他喜欢将所有卡牌按照牌面数字的奇偶性分类并由小到大排序好,由于他最近实验课非常多,他想让优秀的你帮帮他。

输入

多个样例。每个样例包含2行输入: 

第1行输入一个正整数n(2≤n≤10000)表示卡牌数的张数,第2行输入n个正整数ai (ai 满足int类型范围)表示卡牌牌面上的数字,奇数和偶数的个数大于等于1。

输出

每个样例输出2行,第1行是由小到大排序好的奇数数字卡牌,第2行是由小到大排序好的偶数数字卡牌,数字之间用1个空格分开。每两个样例的输出结果之间用1个空行分开。

样例输入 Copy

5
1 6 9 7 2
2
6 101

样例输出 Copy

1 7 9
2 6

101
6 
 1 #include<stdio.h>
 2 
 3 #include<string.h>
 4 
 5 #include<stdlib.h>
 6 
 7 #include<math.h>
 8 #define CRT_SECURE_NO_WARNINGS
 9 
10 int e[10005];
11 int o[10005];
12 int main()
13 {
14     int a;
15     while (scanf("%d", &a) != EOF) {
16         memset(e, 0, sizeof(e));
17         memset(o, 0, sizeof(o));
18         int  num;
19 
20         int b = a;
21         int  cnt1 = 0, cnt2 = 0;
22         for (int i = 0; i < b; ++i) {
23 
24             scanf("%d", &num);
25 
26             if (num % 2 == 1) {
27                 
28                 o[cnt1] = num;
29                 cnt1++;
30             }
31             else {
32                 
33                 e[cnt2] = num;
34                 cnt2++;
35             }
36 
37 
38 
39         }
40 
41         //sort
42         for (int j = 0; j < cnt1 - 1; ++j) {
43             for (int i = 0; i < cnt1 - 1 - j; ++i) {
44 
45                 if (o[i] > o[i + 1]) {
46                     int t = o[i];
47                     o[i] = o[i + 1];
48                     o[i + 1] = t;
49                 }
50 
51             }
52         }
53 
54 
55         for (int j = 0; j < cnt2- 1; ++j) {
56             for (int i = 0; i < cnt2 - 1 - j; ++i) {
57 
58                 if (e[i] > e[i + 1]) {
59                     int t = e[i];
60                     e[i] = e[i + 1];
61                     e[i + 1] = t;
62                 }
63 
64             }
65         }
66         
67 
68         for (int i = 0; i < cnt1; ++i) {
69             printf("%d ", o[i]);
70         }
71         printf("\n");
72 
73         for (int i = 0; i < cnt2; ++i) {
74             printf("%d ", e[i]);
75         }
76 
77         printf("\n\n");
78 
79 
80     }
81 
82     return 0;
83 }

3.小南找书

题目描述

小南热心志愿者活动,有时间的时候会在图书馆帮忙整理书籍。图书馆有一个很大的书架,书架一共有n(1≤n≤103)层,第i层上放了ai (1 ≤ ai ≤ 103)本书。每本书用连续的数字进行了编号:第1层书架上的书从1号到a1号,第2层放的书是从a1+1号到a1 + a2号,以此类推。

例如:当n等于2,a1为1,a2为3时,第1层书架上的1本书编号为1,第2层书架上的3本书编号依次为2、3、4。

小南想让你帮他编程实现,对于给定的书的编号,快速找到这本书在书架的第几层上。

说明:数组定义时如果长度大于106,有些编译器需要定为外部变量。

输入

多个样例。 每个样例输入包括4行:

第1行输入一个整数n (1≤n≤ 103),代表书架的层数。

第2行输入n个整数a1, a2, ..., an (1≤ai ≤103,a1+a2+...+ an ≤106),其中ai代表第i层书架上的书的数量。

第3行输入一个整数m (1≤m≤103)代表小南要找的书的数量。

        第4行输入m个整数b1, b2, ...,bm(1 ≤ ba1+a2+...+ an),分别表示小南要找的m本书的编号。

输出

每个样例输出m行,第i行包含一个整数,代表编号为 bi的书所在的书架的层数。

样例输入 Copy

2
1 3
2
1 3
5
1 8 3 5 8
3
1 24 11

样例输出 Copy

1
2
1
5
3
 1 #include<stdio.h>
 2 
 3 #include<string.h>
 4 
 5 #include<stdlib.h>
 6 
 7 #include<math.h>
 8 #define CRT_SECURE_NO_WARNINGS
 9 
10 int main()
11 {
12     int n;
13     
14     while (scanf("%d", &n) != EOF) {
15         int arr[1005][2] =  {0};
16         //memset(arr[0][0], 0, sizeof(arr));
17 
18         int ai;
19         int sum = 0;
20         int pre = 0;
21 
22         for (int i = 1; i <= n; ++i) {
23             scanf("%d", &ai);
24 
25             sum += ai;
26 
27             if (pre == 0) {
28                 arr[i][0] = 0;
29 
30                 arr[i][1] = sum;
31                 
32             }
33             else {
34                 arr[i][0] = pre + 1;
35 
36                 arr[i][1] = sum;
37 
38             }
39             pre = arr[i][1];
40 
41         }
42 
43         
44 
45         int m;
46         scanf("%d", &m);
47 
48         int mb;
49 
50         for (int i = 1; i <= m; ++i) {
51 
52             //query
53             scanf("%d",& mb);
54 
55 
56             for (int i = 1; i <= n; ++i) {
57 
58                 if (arr[i][0] <= mb && arr[i][1] >= mb) {
59                     printf("%d\n", i);
60                     break;
61                 }
62                 
63 
64             }
65 
66 
67         }
68 
69 
70         // Print
71     /*    for (int i = 1; i <= n; ++i) {
72             printf("%d  %d\n", arr[i][0], arr[i][1]);
73         }*/
74 
75 
76     }
77 
78     return 0;
79 }

4.出线概率

题目描述



2022世界杯正在火热进行中,小南是足球球迷,想知道某个球队的出线概率。经过严肃认真的研究,他发现其出线概率是一种可以计算的玄学:根据球队的名字可以得到出线概率!球队的名字由n(1≤n≤30)个小写字母c1, c2, ..., cn组成,小写字母只包括'a'~'i',其编号分别对应1~9,则出线概率的计算公式为:

 ((-1)1*(c1对应的编号)*101 +(-1)2*(c2对应的编号)*102 + ... (-1)n*(cn对应的编号)*10n )/10n+1

最终结果保留到小数点后n位。例如当球队名字为fff时,f字母对应的编号是6,则出线概率为:(-60+600-6000)/10000=-0.546。

给定某个球队的名字,请你帮助小南计算一下该球队出现在下次世界杯的概率吧!注意有些球队的名字组成很长哦,最大可达30位呢。

输入

多个样例。每个样例输入1行包含一个由小写字母组成的字符串(小写字母只包括'a'~'i'),表示球队的名字,长度为n(1≤n≤30)。

输出

每个样例输出一个实数表示出线概率,保留到小数点后n位。

样例输入 Copy

fff
aaaa

样例输出 Copy

-0.546
0.0909
  1 #include<stdio.h>
  2 
  3 #include<string.h>
  4 
  5 #include<stdlib.h>
  6 
  7 #include<math.h>
  8 #define CRT_SECURE_NO_WARNINGS
  9 
 10 #define long long ll
 11 
 12 
 13 
 14 void Print(int x) {
 15 
 16 
 17     if (x < 10) {
 18         printf("0%d", x);
 19     }
 20     else {
 21         printf("%d", x);
 22     }
 23 
 24 
 25 }
 26 char s[10005];
 27 int main()
 28 {
 29 
 30     while (scanf("%s", &s) != EOF) {
 31 
 32 
 33         int len = strlen(s);
 34 
 35         //printf("%d", len);
 36 
 37         if (len % 2 == 1) {
 38             printf("-");
 39         }
 40 
 41         printf("0.");
 42 
 43         if (len % 2 == 1) {
 44             
 45             /*for (int i = 0; i <= len - 2; i +=2) {
 46 
 47                 char c2 = s[i] - 'a' + 1;
 48                 char c1= s[i + 1] - 'a' + 1;
 49 
 50                 int n = c1 * 10 - c2;
 51 
 52                 Print(n);
 53 
 54             }*/
 55 
 56             for (int i = len -1 ; i >= 1; i -= 2) {
 57 
 58                 char c1 = s[i] - 'a' + 1;
 59                 char c2 = s[i - 1] - 'a' + 1;
 60 
 61                 int n = c1 * 10 - c2;
 62 
 63                 Print(n);
 64 
 65             }
 66 
 67 
 68             printf("%d\n", s[0] - 'a' + 1);
 69 
 70 
 71             //printf("%d", s[0] - 'a' + 1);
 72 
 73         }
 74         else if (len % 2 == 0) {
 75 
 76              
 77 
 78                 for (int i = len  - 1; i  >= 0 ; i -= 2) {
 79 
 80                     char c1 = s[i] - 'a' + 1;
 81                     char c2 = s[i - 1] - 'a' + 1;
 82 
 83                     int n = c1 * 10 - c2;
 84 
 85                     Print(n);
 86 
 87                 }
 88                 printf("\n");
 89 
 90                 //printf("%d\n", s[len - 1] - 'a' + 1);
 91 
 92             
 93             
 94 
 95         }
 96 
 97 
 98     }
 99 
100     return 0;
101 }

5.地铁出行

题目描述

长沙地铁票有两种优惠方式,一种是月票,价格为100元;一种是消费打折,打折的规则为:本次乘车前总消费不足 10 元本次不打折,满 10 元不足 15 元本次打8 折,满 15 元不足 40 元本次打 5 折,已满 40 元后本次不打折。

例如:小南11月份乘坐了3次地铁,原价分别是10元、8元、2元,则第1次由于前面的消费为0元,因此不打折,小南花费10元;第2次的时候由于前面消费满了10元,因此8元的原票价打8折,即花费6.4元;第3次消费的时候前面累计消费了16.4元,因此2元的原票价打5折,即花费1元。那么小南11月份的实际地铁出行费用是17.4元。

        小南在2022年买的是地铁月票,已知小南某月出行的次数和每次出行的原票价,请问他购买月票的决定是否正确?即消费打折后的实际地铁出行费用大于等于月票价格,则认定为正确,否则认定为不正确。

输入

多个样例。 每个样例输入包含2行:

        第1行一个整数n(1≤n≤100)代表小南某月出行的次数,第2行 n 个正整数ai (1 ≤ ai ≤ 50)代表每次出行的原票价,小南是按照输入顺序依次出行的。

输出

对于每个样例,如果小南购买月票的决定正确就输出Yes,否则输出No。每个样例结果输出占一行。

样例输入 Copy

3
10 8 2
8
10 10 10 20 20 20 20 20

样例输出 Copy

No
Yes
 1 #include<stdio.h>
 2 
 3 #include<string.h>
 4 
 5 #include<stdlib.h>
 6 
 7 #include<math.h>
 8 #define CRT_SECURE_NO_WARNINGS
 9 
10 int main()
11 {
12     int  n;
13     while (scanf("%d", &n) != EOF) {
14 
15         int A =100;
16         int B = 0;
17 
18         float  sum = 0;
19 
20         
21 
22         float price = 0 ;
23 
24         for (int i = 0; i < n; ++i) {
25 
26             scanf("%f", &price);
27         //    printf("price=%f\n", price);
28             if (sum < 10) {
29                 price = price;
30             }
31             else if (sum >= 10 && sum < 15) {
32                 price = 0.8 * price;
33             }
34             else if (sum >= 15 && sum < 40) {
35                 price = 0.5 * price;
36             }
37             else if (sum >= 40) {
38                 price = price;
39             }
40 
41             sum += price;
42 
43 
44             //printf("sum=%f\n", sum);
45 
46 
47         }
48 
49         if (A <= sum) {
50             printf("Yes\n");
51         }
52         else {
53             printf("No\n");
54         }
55 
56 
57 
58 
59     }
60 
61     return 0;
62 }

6.填数游戏

题目描述

小南是个素数爱好者,设计了一种与素数有关的填数游戏。该游戏的要求是:输入一个长度为n(1≤n≤10000)的数字串(由数字1~9组成,没有数字0)和一个正整数m(1≤m≤4),将数字串从左边开始,每取m位数字构成一个整数保存起来,剩余的不够m位的也构成一个整数。接下来,他将这些整数ai 按照以下四种特性进行分类:

(1)1类:整数ai 是素数,素数是指除了1和本身外不能被其他数整除的正整数,2是最小的素数。

(2)2类:整数ai 组成的各位数字之和是素数,如整数11的数字之和为2,是素数,满足该条件。

(3)3类:整数ai 组成的各位数字中至少有一个是素数,如整数123中,有素数数字2,满足该条件。

(4)4类:不满足前3类的其他整数。

数据分类按照1类、2类、3类和4类的顺序进行。例如整数223虽然满足1类、2类和3类特性,按照顺序归入1类;25满足2类和3类特性,按照顺序归入2类。接下来小南将这4类整数分别填入一个k*k的方阵中,k为奇数,满足3≤k≤101。该方阵用星号“*”分割成上三角形、左三角形、下三角形和右三角形四个部分,上三角形填入1类整数、左三角形填入2类整数、右三角形填入3类整数、下三角形填入4类整数。填数的过程按照整数出现的顺序从上到下从左至右进行,如果填不满则填充数字0,每个数据输出占5位,右对齐,方阵k的选择要求所有数据都可以按照要求填入且填入的0的个数最少。

说明:当输入的n位数字串为123456789123456789,输入的m为2时,整数分割情况如下:

      1类整数:23、67、89

      2类整数:12、34、56

      3类整数:78、45

      4类整数:91

选定的k为5时的填充情况如图1所示,选定的k为7时的填充情况如图2所示。根据题目要求填入的0的个数最少,则图1是正确的结果。

现有给定的n位数字串和正整数m,请你帮助小南编程实现输出正确的填充结果。

输入

        多个样例。 每个样例输入一行包含一个n(1≤n≤10000)位数字串(由数字1~9组成,没有数字0)和正整数m(1≤n≤4) 。

输出

每个样例按照填充要求输出一个正确的方阵图。输出的整数和星号“*”的位数都是5位,右对齐。每两个样例的输出结果之间用一个空行分开。

样例输入 Copy

123456789123456789 2
1234567 1

样例输出 Copy

    *   23   67   89    *
   12    *    0    *   78
   34   56    *   45    0
    0    *   91    *    0
    *    0    0    0    *

    *    2    3    5    *
    0    *    7    *    0
    0    0    *    0    0
    0    *    1    *    0
    *    4    6    0    *
  1 #include<stdio.h>
  2 
  3 #include<string.h>
  4 
  5 #include<stdlib.h>
  6 
  7 #include<math.h>
  8 #define CRT_SECURE_NO_WARNINGS
  9 
 10 
 11 int c1(int n) {
 12 
 13     int i;
 14     if (n == 1 || n == 0) {
 15         return 0;
 16     }
 17     for (i = 2; i <= sqrt(n); i++)
 18     {
 19         if (n % i == 0)    // 如果不为素数返回0 
 20         {
 21             return 0;
 22         }
 23     }
 24     return 1;    // 反之则返回1 
 25 
 26 }
 27 
 28 
 29 int c2(int n) {
 30 
 31     int m = n;
 32 
 33     int sum = 0;
 34     while (m != 0) {
 35 
 36         sum += m % 10;
 37         m /= 10;
 38 
 39 
 40     }
 41 
 42     if (c1(sum) == 1) {
 43         return 1;
 44     }
 45     else {
 46         return 0;
 47     }
 48 
 49 }
 50 
 51 
 52 int c3(int n) {
 53 
 54     while (n != 0) {
 55 
 56         int m = n % 10;
 57 
 58         if (m == 2 || m == 3 || m == 5 || m == 7) {
 59             return 1;
 60         }
 61         n /= 10;
 62     }
 63     return 0;
 64 
 65 }
 66 
 67 
 68 
 69 
 70 
 71 int main()
 72 {
 73     char s[10005];
 74     int arr[10005];
 75     int a1[10005];
 76     int a2[10005];
 77     int a3[10005];
 78     int a4[10005];
 79     while (scanf("%s", &s) != EOF) {
 80         memset(arr, 0, sizeof(arr));
 81 
 82         int m;
 83         scanf("%d", &m);
 84 
 85         int len = strlen(s);
 86 
 87         int quo = len / m;
 88 
 89         int mod = len % m;
 90         int cnt = 0;
 91 
 92         for (int i = 0; i < len; i += m) {
 93 
 94             int mul = 1;
 95             int num = 0;
 96             for (int j = i + m - 1; j  >= i; --j) {
 97                 int t = s[j] - '0';
 98                 num += t * mul;
 99                 mul *= 10;
100 
101 
102             }
103             arr[cnt++] = num;
104 
105         }
106 
107 
108 
109         //Print
110         if (mod != 0) {
111             int num = 0;
112             int mul = 1;
113             for (int i = len - 1; i >= quo * m; --i) {
114                 int t = s[i] - '0';
115                 num += t * mul;
116                 mul *= 10;
117 
118             }
119             arr[cnt -1 ] = num;
120 
121             /*for (int i = 0; i < quo + 1; ++i) {
122                 printf("%d ", arr[i]);
123             }*/
124 
125         }
126         else if (mod == 0) {
127             /*for (int i = 0; i < quo; ++i) {
128                 printf("%d ", arr[i]);
129             }*/
130         }
131     
132         int b1 = 0, b2 = 0, b3 = 0, b4 = 0;
133         int rmax = 0;
134         for (int i = 0; i < cnt; ++i) {
135             int n = arr[i];
136 
137             if (c1(n) == 1) {
138 
139                 a1[b1++] = n;
140 
141                 if (rmax < b1) {
142                     rmax = b1;
143                 }
144 
145 
146             }
147             else if (c2(n) == 1) {
148                 a2[b2++] = n;
149 
150                 if (rmax < b2) {
151                     rmax = b2;
152                 }
153 
154             }
155             else if (c3(n) == 1) {
156                 a3[b3++] = n;
157 
158                 if (rmax < b3) {
159                     rmax = b3;
160                 }
161 
162 
163             }
164             else {
165                 a4[b4++] = n;
166 
167 
168 
169                 if (rmax < b4) {
170                     rmax = b4;
171                 }
172 
173             }
174 
175         }
176         int k = 3;
177         for ( k = 3; k <= 101; k += 2) {
178 
179             int room = (k - 1) / 2 * (k - 1) / 2;
180 
181             if (rmax <= room) {
182                 break;
183             }
184 
185 
186 
187         }
188         //printf("k=%d", k);
189         int z1 = 0, z2 = 0, z3 = 0, z4 = 0;
190 
191 
192     //    printf("ans:\n\n");
193 
194         for (int i = 0; i <k; ++i) {
195 
196 
197             for (int j = 0; j < k; ++j) {
198 
199 
200                 if (i == j || i + j == k - 1) {
201                     char p = '*';
202                     printf("%5c",p );
203 
204                 }
205                 else {
206 
207                     if (i < j && i + j < k - 1) {
208 
209 
210                         if (z1 < b1) {
211                             printf("%5d", a1[z1++]);
212                         }
213                         else {
214                             printf("%5d",0);
215                         }
216 
217                     }
218 
219                     if (i > j && i + j < k - 1) {
220 
221 
222                         if (z2 < b2) {
223                             printf("%5d", a2[z2++]);
224                         }
225                         else {
226                             printf("%5d",0);
227                         }
228 
229 
230                     }
231 
232                     if (i < j && i + j > k - 1) {
233 
234                         if (z3 < b3) {
235                             printf("%5d", a3[z3++]);
236                         }
237                         else {
238                             printf("%5d",0);
239                         }
240 
241                     }
242                     if (i > j && i + j > k - 1) {
243 
244 
245                         if (z4 < b4) {
246                             printf("%5d", a4[z4++]);
247                         }
248                         else {
249                             printf("%5d",0);
250                         }
251 
252 
253                     }
254 
255 
256                 }
257 
258 
259             }
260 
261 
262 
263             printf("\n");
264 
265         }
266 
267 
268 
269         printf("\n");
270 
271 
272     }
273 
274     return 0;
275 }
02-23 16:47