问题描述
明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了 NN 个 1 到 1000 之间的随机整数(N≤100N≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。
输入格式
第 1 行为 1 个正整数,表示所生成的随机数的个数: NN
第 2 行有 NN 个用空格隔开的正整数,为所产生的随机数。
输出格式
2 行,第 1 行为 1 个正整数 MM,表示不相同的随机数的个数。
第2行为 MM 个用空格隔开的正整数,为从小到大排好序的不相同的随机数。
样例一
input
10
20 40 32 67 40 20 89 300 400 15
output
8
15 20 32 40 67 89 300 400
数据范围与约定
时间限制: 1s1s
内存限制: 256MB
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
unsigned a[110],b[1010];
int main()
{
unsigned N;
cin>>N;
for(int i=1;i<=N;i++)
{
cin>>a[i];
b[a[i]]++;
}
int flag=1,sum=0;
for(int i=1;i<1005;i++)
{
if(b[i]) sum++;
}
cout<<sum<<endl;
for(int i=1;i<1005;i++)
{
if(flag)
{
if(b[i])
{
cout<<i;
flag=0;
i++;
}
}
if(b[i]) cout<<" "<<i;
}
return 0;
}
78题
问题描述
在一个旧式的火车站旁边有一座桥,其桥面可以绕河中心的桥墩水平旋转。一个车站的职工发现桥的长度最多能容纳两节车厢,如果将桥旋转 180 度,则可以把相邻两节车厢的位置交换,用这种方法可以重新排列车厢的顺序。于是他就负责用这座桥将进站的车厢按车厢号从小到大排列。他退休后,火车站决定将这一工作自动化,其中一项重要的工作是编一个程序,输入初始的车厢顺序,计算最少用多少步就能将车厢排序。
输入格式
2 行数据,第一行是车厢总数 NN(N≤10000N≤10000),第二行是 NN 个不同的数表示初始的车厢顺序。
输出格式
一个数据,即最少的旋转次数。
样例一
input
4
4 3