Noip2006信息学普及组要做多少题第一题明明的随机数

编程是时间的艺术!
明明的随机数
桶排序,在洛谷上学来的 我感觉桶排序和哈希差不多吧
const int maxn = 1005;
int bucket[maxn]={0};
int main(){
scanf("%d",&n);
int num = 0;
for(int k=1;k&=n;k++){
scanf("%d",&x);
if(bucket[x]) continue;
bucket[x] = 1;
printf("%d\n",num);
int tag = 0;
for(int i=1;i&=i++){
if(bucket[i]){
printf(tag==0?"%d":" %d",i);
也可以直接用set集合,而且它是自动去重合排序的,刚好物尽其用,直接输出st.size()。
#include &cstdio&
#include&set&
using namespace std;
int main(){
scanf("%d",&n);
for(int k=1;k&=n;k++){
scanf("%d",&x);
st.insert(x);
printf("%d\n",st.size());
set&int&::
int tag = 0;
for(it = st.begin();it!=st.end();it++){
printf(tag==0?"%d":" %d",*it);
没有更多推荐了,[2006年NOIP普及组] 数列
给定一个正整数k(3≤k≤15),把所有k的方幂及所有有限个互不相等的k的方幂之和构成一个递增的序列,例如,当k=3时,这个序列是:
1,3,4,9,10,12,13,…
(该序列实际上就是:30,31,30+31,32,30+32,31+32,30+31+32,…)
请你求出这个序列的第N项的值(用10进制数表示)。
例如,对于k=3,N=100,正确答案应该是981。
输入只有1行,为2个正整数,用一个空格隔开:
(k、N的含义与上述的问题描述一致,且3≤k≤15,10≤N≤1000)。
输出为计算结果,是一个正整数(在所有的测试数据中,结果均不超过2.1*109)。(整数前不要有空格和其他符号)。
import java.util.S
public class Main {
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
k=scan.nextInt();
n=scan.nextInt();
int []a=new int [1001];
while(b&n)
for(int i=0;i&temp&&b&n;i++)
a[b++]=c+a[i];
System.out.println(a[n-1]);
没有更多推荐了,3、明明的随机数
明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。
输入多行,先输入随机整数的个数,再输入相应个数的整数
返回多行,处理后的结果
Java code:
import java.util.A
import java.util.S
public class Test {
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
while(scan.hasNext()){
scan.nextInt();
int arr[] = new int[sum];
for (int i = 0; i & arr. i++) {
arr[i] = scan.nextInt();
Arrays.sort(arr);
for (int i = 0; i & arr. i++) {
if (i == 0) {
System.out.println(arr[0]);
}else if (arr[i]!=arr[i-1]) {
System.out.println(arr[i]);
1、Java的方法是先排序,然后再删除重复的值,接下来的C++版本反过来(先删除重复的值,然后再排序)。
2、要注意最后的for循环,其中的if语句的作用是为了防止数组越界的问题。
C++ code:
#include &iostream&
#include "string.h"
#include &algorithm&
using namespace std;
#define MAX 1000
int main()
int a[MAX];
for (int i = 0;i&i++)
cin && a[i];
for (int i = 0; i & i++)
for (int j = i+1; j & j++)
if (a[i] == 0)
if (a[j] == a[i])
sort(a, a + sum);
for (int i = 0; i &i++)
if (a[i]&0)
cout && a[i] &&
1、先把重复的数据给去了:
用两个for循环
第一层实现对数据的所有的 位置 进行遍历
第二层实现对相同数据进行 归零 处理(因为输入的数据是从1-1000,归零不是一定的,也可以改成负数)
2、归零的reason:方便后面的排序过程
3、调用内置的排序
4、输出的时候大于0再输出
5、先去重再排序,使用的内存空间会降低。
1、Java 实现读取输入内容code
2、Java、C++自带排序sort的使用
3、一个程序总有一些小毛病要修修改改,每次就是调试运行的时候才知道自己哪里哪里出问题了。
以后要多加强这方面的训练,特别是编程思维,先把逻辑关系,预考虑的东西考虑好,然后下手,争取一次成功!
没有更多推荐了,仅用于学习C++
确定要删除当前文章?[编程题]明明的随机数
题目描述:
明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。
输入有2行:第1行为1个正整数,表示所生成的随机数的个数N;第2行有N个空格隔开的正整数,为所产生的随机数。
返回2行:第1行为1个正整数M,表示不相同的随机数的个数;第2行为M个用空格隔开的正整数,为从小到大排好序的不相同的随机数。
1020 40 32 67 40 20 89 300 400 15
815 20 32 40 67 89 300 400
Java代码:
import java.util.ArrayL
import java.util.A
import java.util.S
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNext()) {
int n = in.nextInt();
int[] inArr = new int[n];
for (int i = 0; i & i++) {
inArr[i] = in.nextInt();
Arrays.sort(inArr);
ArrayList&Integer& list = new ArrayList&Integer&();
for (int i = 0; i & i++) {
if (i == 0 || inArr[i] != inArr[i - 1]) {
list.add(inArr[i]);
System.out.println(list.size());
for (int i = 0; i & list.size(); i++) {
System.out.print(list.get(i) + " ");
输出结果:
没有更多推荐了,

我要回帖

更多关于 信息学普及组要做多少题 的文章

 

随机推荐