导语
这是除上午上传,剩下的八道题的题解
QQ:3329998511
有更好的解法,欢迎互相学习讨论
传送门-上午传的前八道
[toc]
九 字符串连接
1.题目描述
不用strcat 函数,自己编写一个字符串链接函数MyStrcat(char dstStr[],charsrcStr[])
2.1输入描述:
两个字符串,字符串由小写字母组成。
2.2输出描述:
链接后的字符串
3.示例1
输入
hello world
good morning
输出
helloworld
goodmorning
4.题解
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(){
char a[100],b[100];
while(scanf("%s %s",a,b)!=EOF){
int len1=strlen(a);
int len2=strlen(b);
char *c=(char *)calloc(len1+len2+1,sizeof(char));
for(int i=0;i<len1;i++){
*(c+i)=a[i];
}
for(int i=0;i<len2;i++){
*(c+len1+i)=b[i];
}
*(c+len1+len2)='\0';
printf("%s\n",c);
//a[100]=b[00]={0};
}
return 0;
}
十 百万富翁
1.题目描述
一个百万富翁遇到一个陌生人,陌生人找他谈了一个换钱的计划。该计划如下:我每天给你10 万元,你第一天给我1 分钱,第二天2 分钱,
第三天4 分钱……
这样交换 30 天后,百万富翁交出了多少钱?陌生人交出了多少钱?(注意一个是万元,一个是分)
2.1输入描述:
该题没有输入
2.2输出描述:
输出两个整数,分别代表百万富翁交出的钱和陌生人交出的钱,富翁交出的钱以万元作单位,陌生人交出的钱以分作单位。
3.示例1
输入
无
输出
无
4.题解
#include<stdio.h>
#include<math.h>
int main(){
double a=pow(2,30)-1;
printf("%d %d\n",30*10,(int)a);
return 0;
}
十一 数组逆置
1.题目描述
输入一个字符串,长度小于等于200,然后将数组逆置输出。
2.1输入描述:
测试数据有多组,每组输入一个字符串。
2.2输出描述:
对于每组输入,请输出逆置后的结果。
3.示例1
输入
hdssg
输出
gssdh
4.题解
#include<stdio.h>
#include<string.h>
void Reserve(char a[]){
int len=strlen(a);
char ch;
for(int i=0;i<len/2;i++){
ch=a[i];
a[i]=a[len-i-1];
a[len-i-1]=ch;
}
a[len]='\0';
printf("%s\n",a);
}
int main(){
char a[201];
while(scanf("%s",a)!=EOF)
Reserve(a);
return 0;
}
十二 数字阶梯求和
1.题目描述
给定a和n,计算a+aa+aaa+a…a(n个a)的和。
2.1输入描述:
测试数据有多组,输入a,n(1<=a<=9,1<=n<=100)。
2.2输出描述:
对于每组输入,请输出结果。
3.示例1
输入
1 10
输出
1234567900
4.题解
#include<stdio.h>
#include<stdlib.h>
int main(){
int a,n;
while(scanf("%d %d",&a,&n)!=EOF){
int *b=(int *)calloc(n+1,sizeof(int));
int jinwei=0;
for(int i=0;i<n;i++){
*(b+i)=(a*(n-i)+jinwei)%10;
jinwei=(a*(n-i)+jinwei)/10;
}
if(jinwei){
*(b+n)=jinwei;
printf("%d",*(b+n));
}
for(int i=n-1;i>=0;i--)
printf("%d",*(b+i));
printf("\n");
}
return 0;
}
十三 字符串内排序
1.题目描述
输入一个字符串,长度小于等于200,然后将输出按字符顺序升序排序后的字符串。
2.1输入描述:
测试数据有多组,输入字符串。
2.2输出描述:
对于每组输入,输出处理后的结果。
3.示例1
输入
bacd
输出
abcd
4.题解
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
bool cmp(const char &a,const char &b){
return a<b;
}
int main(){
char a[201];
while(scanf("%s",a)!=EOF){
int n=strlen(a);
sort(a,a+n,cmp);
printf("%s\n",a);
}
}
十四 求最大值
1.题目描述
输入10个整数,要求输出其中的最大值。
2.1输入描述:
测试数据有多组,每组10个整数。
2.2输出描述:
对于每组输入,请输出其最大值(有回车)。
3.示例1
输入
10 22 23 152 65 79 85 96 32 1
输出
max=152
4.题解
#include<stdio.h>
int main(){
int t;
while(scanf("%d",&t)!=EOF){
int max=t;
for(int i=1;i<10;i++){
scanf("%d",&t);
if(t>max)
max=t;
}
printf("max=%d\n",max);
}
return 0;
}
十五 字符串去特定字符
1.题目描述
输入字符串s和字符c,要求去掉s中所有的c字符,并输出结果。
2.1输入描述:
测试数据有多组,每组输入字符串s和字符c。
2.2输出描述:
对于每组输入,输出去除c字符后的结果。
3.示例1
输入
heallo
a
输出
hello
4.题解
#include<stdio.h>
#include<string.h>
int main(){
char s[100],c;
while(scanf("%s %c",s,&c)!=EOF){
int len=strlen(s);
int count=0;
for(int i=0;i<len;i++){
if(s[i]!=c)
s[i-count]=s[i];
else count++;
}
s[len-count]='\0';
printf("%s\n",s);
}
return 0;
}
十八 两个矩阵的乘积
1.题目描述
计算两个矩阵的乘积,第一个是2*3,第二个是3*2
2.1输入描述:
输入为两个矩阵,其中一个为2*3的矩阵,另一个为3*2的矩阵
2.2输出描述:
一个2*2的矩阵(每一个数字后都跟一个空格)
3.示例1
输入
1 2 3
3 4 5
6 7
8 9
10 11
输出
52 58
100 112
4.题解
#include<stdio.h>
#define r 2
#define v 3
int main(){
int a[r][v],b[v][r],c[r][r]={0};
for(int i=0;i<r;i++)
for(int j=0;j<v;j++)
scanf("%d",&a[i][j]);
for(int i=0;i<v;i++)
for(int j=0;j<r;j++)
scanf("%d",&b[i][j]);
for(int i=0;i<r;i++)
for(int j=0;j<r;j++)
for(int k=0;k<v;k++){
c[i][j]+=a[i][k]*b[k][j];
}
for(int i=0;i<r;i++){
for(int j=0;j<r;j++)
printf("%d ",c[i][j]);
printf("\n");
}
return 0;
}