题目:P1059 [NOIP2006 普及组] 明明的随机数
题解:
#include<iostream>
#include<algorithm>//快排头文件
using namespace std;
int a[1005],b[1005]={0};
int main()
{
int n,x;
cin>>n;
int cnt=0;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
sort(a,a+n);
for(int i=0;i<n;i++)//去重,后一位与前一位如果相等,只存一个
{
if(i==0)//
{
if(a[1]!=a[0])
{
b[0]=a[0];
cnt++;
}
else
{
b[0]=a[1];
cnt++;
}
}
else
{
if(a[i]!=a[i-1])
{
b[cnt]=a[i];
cnt++;
}
}
}
cout<<cnt<<endl;
for(int i=0;i<cnt;i++)
{
cout<<b[i]<<" ";
}
return 0;
}
或
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int n;
int t,a[1005]={0};
cin>>n;
for(int i=0;i<n;i++)
{
cin>>t;
a[t]=1;//只要出现过,无论几次,就标记
}
int cnt=0;
for(int i=0;i<1005;i++)
{
if(a[i]==1)
{
cnt++;//哪几个数被标记过了
}
}
cout<<cnt<<endl;
for(int i=0;i<1005;i++)
{
if(a[i]==1) //被标记过的数字输出
{
cout<<i<<" ";//去重
}
}
return 0;
}#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int n;
int t,a[1005]={0};
cin>>n;
for(int i=0;i<n;i++)
{
cin>>t;
a[t]=1;//只要出现过,无论几次,就标记
}
int cnt=0;
for(int i=0;i<1005;i++)
{
if(a[i]==1)
{
cnt++;//哪几个数被标记过了
}
}
cout<<cnt<<endl;
for(int i=0;i<1005;i++)
{
if(a[i]==1) //被标记过的数字输出
{
cout<<i<<" ";//去重
}
}
return 0;
}
题目:P1177 【模板】快速排序
题解:
#include<iostream>
#include<algorithm> //快排头文件
using namespace std;
int num[100005];
int main()
{
int n,x;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>num[i];
}
sort(num,num+n);// 从小到大排
for(int i=0;i<n;i++)
{
cout<<num[i]<<" ";
}
return 0;
}
题目:P1271 【深基9.例1】选举学生会
题解:
#include<iostream>
#include<algorithm> //快排头文件
using namespace std;
int a[2000005];
int main()
{
int n,m;
cin>>n>>m;
for(int i=0;i<m;i++)
{
cin>>a[i];
}
sort(a,a+m); //sort排序
for(int i=0;i<m;i++)
{
cout<<a[i]<<" ";
}
return 0;
}
题目:P1116 车厢重组
链接:车厢重组 - 洛谷
题解:
#include<cstdio>
#include<iostream>
#include<cstring>
#include<string>
#include<cmath>
#include<algorithm>
using namespace std;
int main()
{
int n;
int a[10000];
int cnt=0;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];//读入数据
}
for(int i=n-2;i>=0;i--)//第一次循环,每次交换时左项最大下表为gs-2,此时右项下标为gs-1,为数组最后一项,不可再。第二次循环时,gs-1位已确定则只用循环到gs-3即可,以此类推,边界为0
{
for(int j=0;j<=i;j++)//j=左下标,j+1=右下标
{
if(a[j]>a[j+1])//如果需要交换
{
a[j]+=a[j+1];
a[j+1]=a[j]-a[j+1];
a[j]-=a[j+1];
//设a,b为原a[j],a[j+1]值,则三步种a[j],a[j+1]的值分别为:
//第一步:a+b,b
//第二步:a+b,a
//第三步:b,a,大家如果还不理解可以自己试一下
cnt++;//计一次交换
}
}
}
printf("%d",cnt);
return 0;
}
题目:P1152 欢乐的跳
链接:欢乐的跳 - 洛谷
题解:
#include<cstdio>
#include<iostream>
#include<cstring>
#include<string>
#include<cmath>//abs
#include<algorithm>
using namespace std;
int a[9999999],b[9999999];
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
for(int i=1;i<=n;i++)
{
b[i]=abs(a[i]-a[i+1]);//前一个-后一个差的绝对值
}
sort(b+1,b+n);//排序
for(int i=1;i<n;i++)
{
if(b[i]!=i)
{
cout<<"Not jolly";//有任何一个不等于1-n的
return 0;//结束程序
}
}
cout<<"Jolly";
return 0;
}