天天看點

記錄一下競賽題目,為下次競賽做準備

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);

}

}