18.9.29 数算作业-线性表
字符串插入(10分)
题目内容:
有两个字符串str和substr,str和substr的字符个数不超过10^5,只包含大小写字母和数字。(字符个数不包括字符串结尾处的'\0'。)将substr插入到str中ASCII码最大的那个字符后面,若有多个最大则只考虑第一个。
输入格式:
输入数据只有一行,格式为
str substr
输出格式:
输出插入之后的字符串。
输入样例:
abcab eee
输出样例:
abceeeab
时间限制:500ms内存限制:32000kb
View Code
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 }
大整数乘法(10分)
题目内容:
求两个不超过200位的非负整数的积。
输入格式:
有两行,每行是一个不超过200位的非负整数,没有多余的前导0。
输出格式:
一行,即相乘后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
输入样例:
12345678900
98765432100
输出样例:
1219326311126352690000
时间限制:500ms内存限制:32000kb
View Code
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 }
约瑟夫问题(10分)
题目内容:有n只猴子,按顺时针方向围成一圈选大王(编号从1到n),从第1号开始报数,一直数到m,数到m的猴子退出圈外,剩下的猴子再接着从1开始报数。就这样,直到圈内只剩下一只猴子时,这个猴子就是猴王,编程求输入n,m后,输出最后猴王的编号。
输入格式:输入包含两个整数,第一个是n,第二个是m (0 < m,n <=300)。
输出格式:输出包含一行,即最后猴王的编号。
输入样例:18 2
输出样例:5
时间限制:500ms内存限制:32000kb
View Code
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 }
计概题重做
前两题没有用上线性表会不会有问题啊qwq
我做之前都没意识到这是线性表作业……我看到第一题还以为是字符串……直到看到第三题……
注定失败的战争,也要拼尽全力去打赢它;
就算输,也要输得足够漂亮。