作业介绍
算法动画演示网站
https://visualgo.net/en/sorting
//基数排序
#include<bits/stdc++.h>
using namespace std;
int t[10][10005],idx[10];
int a[10005];
//a数组用于存放原本数字
//t数组作为桶行数决定当前位置的数字是多少,列数用于存放数据
//idx数组用于存放每个桶中已经放了多少个数字了
int len_max(int k)//获取最大数字长度
{
int p=0;
while(k!=0)
{
k/=10;
p++;
}
return p;
}
int main()
{
int n,max=-1;
cin>>n;
//输入需要进行排序的数字
for(int i=0;i<n;i++){
cin>>a[i];
if(max<a[i])max=a[i];
}
//在输入的过程中找到最大值并求出其长度用于决定进行几次基数排序
int l=len_max(max);
for(int i=1;i<=l;i++)//循环l次,进行l次基数排序
{
memset(t,0,sizeof t);
memset(idx,0,sizeof idx);//将idx数组和t数组全部重置为0
for(int j=0;j<n;j++)//循环将每个数字入桶
{
int w=a[j]/int(pow(10,i-1))%10;//将当前位置 取出根据当前位置进行入桶操作
t[w][idx[w]++] =a[j];//入桶,并把当前桶中存放了多少个数字进行更新
}
int z=0;
//更新a数组的值,以便进行下一次排序
for(int x=0;x<10;x++)//遍历每个桶
{
for(int y=0;y<idx[x];y++)//根据桶中存放的数字进行遍历取出每个桶中的所有数字,遵循先进先出
{
a[z++]=t[x][y];//z作为a数组的下标,重新将每个数字放入原数组中进行覆盖
}
}
}
for(int i=0;i<n;i++)//最后一次排序后,数组变为从小到大的有序数列,可以直接进行输出
{
cout<<a[i]<<' ';
}
return 0;
}
#include<bits/stdc++.h>
using namespace std;
int s[26]={1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,4,1,2,3,1,2,3,4};
int main(){
string a;
getline(cin,a);
int h=0;
for(int i=0;a[i];i++){
if(a[i]==' ') h+=1;
else h+=s[a[i]-'a'];
}
cout<<h;
return 0;
}
- 状态
- 已结束
- 题目
- 9
- 开始时间
- 2024-6-13 0:00
- 截止时间
- 2024-7-31 23:59
- 可延期
- 24 小时