车厢重组
#include<bits/stdc++.h>
using namespace std;
int n,ans=0,d;
int shu[10005];
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&d);
shu[i]=d;
}
for(int i=n-1;i>=1;i--) // 这个从n-1开始,因为有n-1个循环
{
for(int j=1;j<=i;j++) //这里是小于i,因为一开始要swap的次数多,后面慢慢减少
{
if(shu[j]>shu[j+1])
{
swap(shu[j],shu[j+1]); // 冒泡排序
ans++;
}
}
}
printf("%d",ans);
return 0;
}
---------------------------------------------------------------------------------------------------------------------------------
奶牛取书
#include<bits/stdc++.h>
using namespace std;
int n,b,h,ans=1;
int shu[20005];
int main()
{
scanf("%d%d",&n,&b);
for(int i=0;i<n;i++)
{
scanf("%d",&h);
shu[i]=h;
}
sort(shu,shu+n);
for(int j=n-1;j>=0;j--)
{
if(shu[j]>=b)
{
printf("%d",ans);
break;
}
else
{
ans++;
b-=shu[j]; // 一个一个比较,比较完在b里减去比较过的就行了
}
}
return 0;
}
---------------------------------------------------------------------------------------------------------------------------------
奖学金
#include<bits/stdc++.h>
using namespace std;
const int N=305;
int n,a,b,c,he;
int yu[N],shu[N],ying[N],zong[N],hao[N];
struct pack // 这里主要关注用结构体帮助排序
{
int yu,zong,hao;
};
pack y[N]; // 这里定义y为一个pack类型的变量
bool cmp(pack a,pack b) // 自定义cmp排序方法,注意a写在前面就会排在前面
{
if(a.yu==b.yu&&a.zong==b.zong) return a.hao<b.hao;
else if(a.zong==b.zong) return a.yu>b.yu;
else return a.zong>b.zong;
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d%d%d",&a,&b,&c);
yu[i]=a;
shu[i]=b;
ying[i]=c;
hao[i]=i;
he=a+b+c;
zong[i]=he;
y[i].hao=hao[i]; // 这样就可以存进结构体里啦,y后面先写中括号里的内容,再写变量名
y[i].zong=zong[i];
y[i].yu=yu[i];
}
sort(y+1,y+n+1,cmp); //注意加一,因为数组是从1开始的,根据sort左闭右开的原则,y加完n还要加1
for(int i=1;i<=5;i++)
{
printf("%d %d\n",y[i].hao,y[i].zong); // 输出记得换行
}
return 0;
}
---------------------------------------------------------------------------------------------------------------------------------
欢乐的跳
#include<bits/stdc++.h>
using namespace std;
const int N=1005;
int n,x,c,ans=0;
int shu[2*N],cha[2*N],d[N];
int main()
{
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d",&x);
shu[i]=x;
}
for(int i=0;i<n-1;i++)
{
c=abs(shu[i]-shu[i+1]);
cha[i]=c;
}
sort(cha,cha+n-1);
for(int i=0;i<n-1;i++)
{
d[i]=i+1;
}
for(int i=0;i<n-1;i++)
{
if(cha[i]==d[i]) ans++; // 把差排完序再与1到n-1范围内的整数按顺序比较,有一个相等结果就加一,如果结果等于n-1即符合条件。
}
if(ans==n-1) printf("Jolly");
else printf("Not jolly");
return 0;
}
---------------------------------------------------------------------------------------------------------------------------------
挑选志愿者,入围面试
#include<bits/stdc++.h>
using namespace std;
const int N=10005;
int n,m,kk,ss,rw,ans=0;
int k[N],s[N];
struct pack // 这里也用结构体帮助排序
{
int k,s;
};
pack y[N];
bool cmp(pack a,pack b)
{
if(a.s==b.s) return a.k<b.k; // 注意排序方式了
else return a.s>b.s;
}
int main()
{
scanf("%d%d",&n,&m);
m=m*1.5;
for(int i=1;i<=n;i++)
{
scanf("%d%d",&kk,&ss);
k[i]=kk;
s[i]=ss;
y[i].k=k[i];
y[i].s=s[i];
}
//puts("qqqqq");
sort(y+1,y+n+1,cmp); // 这里y+n也要+1,因为需要的数组从一开始
rw=y[m].s;
for(int i=1;i<=n;i++)
{
if(y[i].s>=rw) ans++;
}
printf("%d %d\n",rw,ans);
for(int i=1;i<=n;i++)
{
if(y[i].s>=rw) printf("%d %d\n",y[i].k,y[i].s);
}
return 0;
}
---------------------------------------------------------------------------------------------------------------------------------
明明的随机数
#include<bits/stdc++.h>
using namespace std;
int n,shu,q=-1,ans=0;
int x[1005];
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++) //有n个数要处理,典型的桶排啦
{
scanf("%d",&shu);
x[shu]++; // 该数的数量加一
q=max(shu,q); // q一直都是出现过的数里最大的数
if(x[shu]==1) ans++; //统计有多少个不重复的数,所以只有出现一次时结果加1
}
printf("%d\n",ans);
for(int i=1;i<=q;i++) // 一直判断到最大的数就停
{
if(x[i]>=1) printf("%d ",i); // 求不重复的数,所以输出一次就好了
}
return 0;
}