您的位置:首页 > 其它

记录一下竞赛题目,为下次竞赛做准备

2011-04-07 15:44 330 查看

import java.util.Scanner;

public class Main {
private int[]arrays;//用于存放输入的整数
private int number;//记录个数
//初始化
public Main(int n)
{
number=n;
arrays=new int[number];
}
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
Main mm=new Main(n);
for(int i=0;i<n;i++)
{
mm.arrays[i]=sc.nextInt();
}
mm.judge();

}
//判断是否是相邻数
public void judge()
{
int count=0;//变量count主要用来记录零的个数
//通过选择排序,使数组有序
for(int i=0;i<number-1;i++)
for(int j=i+1;j<number;j++)
{
if(arrays[i]>arrays[j])
{
int temp=arrays[i];
arrays[i]=arrays[j];
arrays[j]=temp;
}
}
//记录0的个数
while(arrays[count]==0)
{
count++;
}
//从非零的索引算起,后一个如果比前一个大一,那么就不减,多于1开始用零来替换
for(int i=count;i<number-1;i++)
{
count-=arrays[i+1]-arrays[i]-1;
}
//给出结论
if(count>=0)
System.out.println("Yes");
else
System.out.println("No");
}

}
1.连续相邻

时限:1000ms 内存限制:10000K  总时限:1000ms

描述:
给定一个由n个整数组成的数列,数列中元素取值为(0,65535)之间的整数,相同数值不会重复出现,0是一个例外,可以反复出现,并且可以通配任意一个整数,判断这个数列是否乱序相邻(经过排序后相邻数字之差均为1就认为是乱序相邻)。
输入:
第一行为一个整数n,表示数列中整数的个数;第二行为n(n不超过10000)个整数。
输出:
输出占一行,如果此数列乱序相邻,输出Yes,否则输出No。
输入样例:
5
8 7 5 0 6
输出样例:
Yes
提示:
对于上面的输入例子,0可以通配4或者9,这样数列是乱序相邻的,所以输出Yes。思考比盲目行动来的更重要,更有结果。
 
2.

连写数

时限:1000ms 内存限制:10000K  总时限:3000ms

描述:
从1开始按正整数的顺序不间断连续写下去123456789101112……,所成的整数称为连写数。要是连写数1234……m能被整数n整除,m至少为多大?
输入:
一个整数n,n在(0,32768)之间。
输出:
输出占一行,满足条件的最小m的值。
输入样例:
5
1999
输出样例:
5
4166
提示:
对于上面的输入例子,5对应的连写数为12345,因此m的最小值为5;对于1999对应的连写数为1234……4166,是一个15557位的超大数字。
/*连写数问题*/
import java.util.Scanner;

public class Main {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
find(n);

}
/*该问题的难点是怎样保存数据,如果将这么长的数据整个存储下来是不可能的
* ,所以,如果每次用除下来的余数和后面的数来累积,就可以存储了。
* */
public static void find(int n)
{
int index=2;
int sum=1;
while(!(sum%n==0))
{
String ssum=sum%n+""+index;
sum=Integer.valueOf(ssum);
index++;
}
System.out.println(index-1);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息