18.9.29 数算作业-线性表

字符串插入(10分)

题目内容:

有两个字符串str和substr,str和substr的字符个数不超过10^5,只包含大小写字母和数字。(字符个数不包括字符串结尾处的'\0'。)将substr插入到str中ASCII码最大的那个字符后面,若有多个最大则只考虑第一个。

输入格式:

输入数据只有一行,格式为

str substr

输出格式:

输出插入之后的字符串。

输入样例:

abcab eee

输出样例:

abceeeab
时间限制:500ms内存限制:32000kb
 1 #include <iostream>
 2 #include <string.h>
 3 
 4 using namespace std;
 5 
 6 const int maxn = 100005;
 7 char str[maxn * 2], substr[maxn];
 8 
 9 int main()
10 {
11     cin >> str >> substr;
12     int themaxone = 0, maxvalue = 0;
13     int l = strlen(str), _l = strlen(substr);
14     for (int i = 0; str[i] != '\0'; i++)
15     {
16         if (str[i] > maxvalue)
17         {
18             maxvalue = str[i];
19             themaxone = i;
20         }
21     }
22     for (int i = l - 1; i>themaxone; i--)
23         str[i + _l] = str[i];
24     for (int i = themaxone + 1; i <= themaxone + _l; i++)
25         str[i] = substr[i - themaxone-1];
26     for (int i = 0; i<l + _l; i++)
27         printf("%c", str[i]);
28     printf("\n");
29     return 0;
30 }
View Code

大整数乘法(10分)

题目内容:

求两个不超过200位的非负整数的积。

输入格式:

有两行,每行是一个不超过200位的非负整数,没有多余的前导0。

输出格式:

一行,即相乘后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。

输入样例:

12345678900

98765432100

输出样例:

1219326311126352690000

时间限制:500ms内存限制:32000kb
 1 #include <iostream>
 2 #include <string.h>
 3 #include <algorithm>
 4 
 5 using namespace std;
 6 const int maxn = 205;
 7 
 8 char num1[maxn], num2[maxn];
 9 int ans[maxn * 2], num1int[maxn], num2int[maxn];
10 
11 int main()
12 {
13     cin >> num1 >> num2;
14     int l1 = strlen(num1), l2 = strlen(num2);
15     int anslen = 0;
16     for (int i = l1 - 1; i >= 0; i--)
17         num1int[l1 - i ] = num1[i] - '0';
18     for (int i = l2 - 1; i >= 0; i--)
19         num2int[l2 - i ] = num2[i] - '0';
20     for(int i=1;i<=l1;i++)
21         for (int j = 1; j <= l2; j++) {
22             ans[i + j - 1] += num1int[i] * num2int[j];
23             ans[i + j] += ans[i + j - 1] / 10;
24             ans[i + j - 1] %= 10;
25             anslen = max(anslen, i + j - 1);
26             if (ans[i + j] != 0)
27                 anslen = max(anslen, i + j);
28         }
29     for (int i = anslen; i >= 1; i--)
30         printf("%d", ans[i]);
31     printf("\n");
32     return 0;
33 }
View Code

约瑟夫问题(10分)

题目内容:有n只猴子,按顺时针方向围成一圈选大王(编号从1到n),从第1号开始报数,一直数到m,数到m的猴子退出圈外,剩下的猴子再接着从1开始报数。就这样,直到圈内只剩下一只猴子时,这个猴子就是猴王,编程求输入n,m后,输出最后猴王的编号。

输入格式:输入包含两个整数,第一个是n,第二个是m (0 < m,n <=300)。

输出格式:输出包含一行,即最后猴王的编号。

输入样例:18 2

输出样例:5

时间限制:500ms内存限制:32000kb
 1 #include <iostream>
 2 #include <string.h>
 3 #include <algorithm>
 4 
 5 using namespace std;
 6 struct seq{
 7     int ele[305];
 8     int n;
 9     seq(int _n) {
10         n = _n;
11         for (int i = 0; i < n; i++)
12             ele[i] = i+1;
13     }
14     void delete_ele(int id) {
15         for (int i = id; i < n - 1; i++)
16             ele[i] = ele[i + 1];
17         n--;
18     }
19     void print_top() {
20         printf("%d\n", ele[0]);
21     }
22 };
23 
24 int main()
25 {
26     int n,m;
27     scanf("%d%d", &n,&m);
28     seq mkys(n);
29     int now = 0;
30     for (int i = 1; i <= n - 1; i++) {
31         now = (now + m - 1) % mkys.n;
32         mkys.delete_ele(now);
33     }
34     mkys.print_top();
35     return 0;
36 }
View Code

计概题重做

前两题没有用上线性表会不会有问题啊qwq

我做之前都没意识到这是线性表作业……我看到第一题还以为是字符串……直到看到第三题……

posted @ 2018-09-29 16:49  TobicYAL  阅读(303)  评论(0编辑  收藏  举报