C++排序算法一(练习题)
坐电梯取砖石游戏
【描述】有一栋楼,共N层,有一座电梯可以从1楼上升到N楼,每层楼的门口都有一颗砖石,重量可能不一样。电梯在每层楼都会停一下。电梯又一个特别的按钮:到达第i层后,按下按钮,可以交换第i-1层和电梯第i层电梯口的砖石,i=2,3,4…N。从一楼出发,坐电梯到N层,要使得第N层楼的砖石最重,需要按多少次按钮?
【输入】输入占一行,首先是一个正整数N,2<=N<=20;然后是N个正整数,表示第1~N层楼梯电梯门口砖石重量,砖石的重量各个不相同。
【输出】输出求得的答案,即按按钮的次数
【样例输入】
8 49 38 65 97 76 13 27 30
【样例输出】
5
#include <bits/stdc++.h>
using namespace std;
int main()
{
int a[30],n;
int i,t;//用来交换两个数的中间变量
int cnt=0;//统计交换次数
cin>>n;
for(i=0;i<n;i++)
cin>>a[i];//输入
for(i=0;i<n-1;i++)//进行n-1次两辆比较
if(a[i]>a[i+1])//比较的是前后两个数a[i]和a[i+1]
{
cnt++;
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}//如果逆序则交换
cout<<cnt<<endl;
return 0;
}
/*
【输入用例2】
9 123 45 299 150 88 300 220 56 189
【输出用例2】
6
【输入用例3】
10 123 45 299 150 88 300 220 56 189 77
【输出用例3】
7
【输入用例4】
11 123 45 299 150 88 300 220 56 189 77 205
【输出用例4】
8
【输入用例5】
12 123 45 299 150 88 300 220 56 189 77 205 99
【输出用例5】
9
【输入用例6】
13 123 45 299 150 88 300 220 56 189 77 205 99 156
【输出用例6】
10
*/
字符串排序
【描述】输入n个字符串(假定不包含空格),按ASCII编码值从小到大排序,排序方法采用简单排序
【输入】输入数据的第一行为正整数n,2<=n<=100,接下来又n行,每行是一个字符串
【输出】输出占n行,为排序后的n个字符串,每个字符串占一行
【样例输入】
5
China
GERMANY
French
England
ENGLAND
【样例输出】
China
ENGLAND
England
French
GERMANY
#include<bits/stdc++.h>
using namespace std;
int main()
{
char s[110][80];//读入的n个字符串
char t[80];//临时存放字符串
int n,i,j;
cin>>n;
for(i=0;i<n;i++)
cin>>s[i];
for(i=0;i<n-1;i++)//简单选择法实现
{
int k=i;
for(j=i+1;j<n;j++)
if(strcmp(s[j],s[k])<0)
k=j;
if(k!=i)
{
strcpy(t,s[k]); strcpy(s[k],s[i]); strcpy(s[i],t);
}
}
for(i=0;i<n;i++)
cout<<s[i]<<endl;
return 0;
}
/*
【输入用例2】
5
Python
Java
C
Ruby
Go
【输出用例2】
C
Go
Java
Python
Ruby
【输入用例3】
3
apple
banana
cherry
【输出用例3】
apple
banana
cherry
【输入用例4】
4
Dog
cat
bird
Ant
【输出用例4】
Ant
Dog
bird
cat
*/
字符排序
【描述】输入一个字符串,假定字符串只包含大小写字母字符,对字符串中的字符按ASCII编码值从小到大排序,例如,输入的字符串为viSuaL,排序后为LSaiuv。
【输入】输入占一行,为一个只包含大小写的字母字符串,长度不超过100个字符。
【输出】输出排序后的字符串
【样例输入】
viSuaL
【样例输出】
LSaiuv
#include<bits/stdc++.h>
using namespace std;
int main()
{
char a[110];//存储输入的字符串
int i,k,j,t;
cin>>a;
int n=strlen(a);
for(i=0;i<n-1;i++)//共进行n-1趟选择及交换
{
k=i;//第i趟中最小的数初始为a[i]
for(j=i+1;j<n;j++)//将a[i+1]~a[n-1]与a[k]比较
{
if(a[j]<a[k])
k=j;
}
t=a[k];
a[k]=a[i];
a[i]=t;//交换a[k]与a[i]
}
cout<<a<<endl;
return 0;
}
/*
【输入用例2】
viSuaL
【输出用例2】
LSaiuv
【输入用例3】
HELLO
【输出用例3】
EHLLO
【输入用例4】
aaaaabbb
【输出用例4】
aaaaabbb
【输入用例5】
Ab1C
【输出用例5】
1ACb
【输入用例6】
ABCDE
【输出用例6】
ABCDE
*/
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)