第一題
問題描述
Fibonacci數列的遞推公式爲:Fn=Fn-1+Fn-2,其中F1=F2=1。
當n比較大時,Fn也非常大,現在我們想知道,Fn除以10007的餘數是多少。
輸入格式
輸入包含一個整數n。
輸出格式
輸出一行,包含一個整數,表示Fn除以10007的餘數。
說明:在本題中,答案是要求Fn除以10007的餘數,因此我們只要能算出這個餘數即可,而不需要先計算出Fn的準確值,再將計算的結果除以10007取餘數,直接計算餘數往往比先算出原數再取餘簡單。
樣例輸入
10
樣例輸出
55
樣例輸入
22
樣例輸出
7704
數據規模與約定
1 <= n <= 1,000,000。
答案:
對40%
package test123;
import java.util.Scanner;
public class Main{
private static long i = 0;
private static long n[];
private static long m;
public static void main(String[] args) {
n = new long[1000000];
Scanner input = new Scanner(System.in);
m = input.nextInt();
n[1]=1;
n[2]=1;
for (i = 3;i<=m;++i){
n[(int) i] = (n[(int) (i-1)]+n[(int) (i-2)]);
//System.out.println(n[(int) (i-1)]);
}
if(n[(int) (i-1)]<=10007)
System.out.println(n[(int) (i-1)]);
else if(n[(int) (i-1)]>10007)
System.out.println((n[(int) (i-1)]-(n[(int) (i-1)]/10007)*10007));
else System.out.println(0);
}
}
對100%
import java.util.Scanner;
public class Main{
private static long i = 0;
private static long n[];
private static long m;
public static void main(String[] args) {
n = new long[1000000];
@SuppressWarnings("resource")
Scanner input = new Scanner(System.in);
m = input.nextInt();
n[1]=1;
n[2]=1;
for (i = 3;i<=m;++i){
n[(int) i] = (n[(int) (i-1)]+n[(int) (i-2)])%10007;
}
System.out.println(n[(int) (i-1)]);
}
}
第二題
問題描述
給定圓的半徑r,求圓的面積。
輸入格式
輸入包含一個整數r,表示圓的半徑。
輸出格式
輸出一行,包含一個實數,四捨五入保留小數點後7位,表示圓的面積。
說明:在本題中,輸入是一個整數,但是輸出是一個實數。
對於實數輸出的問題,請一定看清楚實數輸出的要求,比如本題中要求保留小數點後7位,則你的程序必須嚴格的輸出7位小數,輸出過多或者過少的小數位數都是不行的,都會被認爲錯誤。
實數輸出的問題如果沒有特別說明,舍入都是按四捨五入進行。
樣例輸入
4
樣例輸出
50.2654825
數據規模與約定
1 <= r <= 10000。
提示
本題對精度要求較高,請注意π的值應該取較精確的值。你可以使用常量來表示π,比如PI=3.14159265358979323,也可以使用數學公式來求π,比如PI=atan(1.0)*4。
答案
import java.util.Scanner;
public class Main {
private static int r = 0;
private static double PI=3.14159265358979323;
private static double S=0;
public static void main(String[] args){
@SuppressWarnings("resource")
Scanner input = new Scanner(System.in);
r = input.nextInt();
S = r*r*PI;
System.out.println(String.format("%.7f",S));//注意java這樣精確到7位
}
}
第三題
問題描述
求1+2+3+…+n的值。
輸入格式
輸入包括一個整數n。
輸出格式
輸出一行,包括一個整數,表示1+2+3+…+n的值。
樣例輸入
4
樣例輸出
10
樣例輸入
100
說明:有一些試題會給出多組樣例輸入輸出以幫助你更好的做題。
一般在提交之前所有這些樣例都需要測試通過才行,但這不代表這幾組樣例數據都正確了你的程序就是完全正確的,潛在的錯誤可能仍然導致你的得分較低。
樣例輸出
5050
數據規模與約定
1 <= n <= 1,000,000,000。
說明:請注意這裏的數據規模。
本題直接的想法是直接使用一個循環來累加,然而,當數據規模很大時,這種“暴力”的方法往往會導致超時。此時你需要想想其他方法。你可以試一試,如果使用1000000000作爲你的程序的輸入,你的程序是不是能在規定的上面規定的時限內運行出來。
本題另一個要值得注意的地方是答案的大小不在你的語言默認的整型(int)範圍內,如果使用整型來保存結果,會導致結果錯誤。
如果你使用C++或C語言而且準備使用printf輸出結果,則你的格式字符串應該寫成%I64d以輸出long long類型的整數。
答案
import java.util.Scanner;
public class Main2 {
private static long n;
public static void main(String args[]){
@SuppressWarnings("resource")
Scanner input = new Scanner(System.in);
n = input.nextInt();
n = (1+n)*n/2;
System.out.println(n);
}
}
第四題
問題描述
輸入A、B,輸出A+B。
說明:在“問題描述”這部分,會給出試題的意思,以及所要求的目標。
輸入格式
輸入的第一行包括兩個整數,由空格分隔,分別表示A、B。
說明:“輸入格式”是描述在測試你的程序時,所給的輸入一定滿足的格式。
做題時你應該假設所給的輸入是一定滿足輸入格式的要求的,所以你不需要對輸入的格式進行檢查。多餘的格式檢查可能會適得其反,使用你的程序錯誤。
在測試的時候,系統會自動將輸入數據輸入到你的程序中,你不能給任何提示。比如,你在輸入的時候提示“請輸入A、B”之類的話是不需要的,這些多餘的輸出會使得你的程序被判定爲錯誤。
輸出格式
輸出一行,包括一個整數,表示A+B的值。
說明:“輸出格式”是要求你的程序在輸出結果的時候必須滿足的格式。
在輸出時,你的程序必須滿足這個格式的要求,不能少任何內容,也不能多任何內容。如果你的內容和輸出格式要求的不一樣,你的程序會被判斷爲錯誤,包括你輸出了提示信息、中間調試信息、計時或者統計的信息等。
樣例輸入
12 45
說明:“樣例輸入”給出了一組滿足“輸入格式”要求的輸入的例子。
這裏給出的輸入只是可能用來測試你的程序的一個輸入,在測試的時候,還會有更多的輸入用來測試你的程序。
樣例輸出
57
說明:“樣例輸出”給出了一組滿足“輸出格式”要求的輸出的例子。
樣例輸出中的結果是和樣例輸入中的是對應的,因此,你可以使用樣例的輸入輸出簡單的檢查你的程序。
要特別指出的是,能夠通過樣例輸入輸出的程序並不一定是正確的程序,在測試的時候,會用很多組數據進行測試,而不侷限於樣例數據。有可能一個程序通過了樣例數據,但測試的時候仍只能得0分,可能因爲這個程序只在一些類似樣例的特例中正確,而不具有通用性,再測試更多數據時會出現錯誤。
比如,對於本題,如果你寫一個程序不管輸入是什麼都輸入57,則樣例數據是對的,但是測試其他數據,哪怕輸入是1和2,這個程序也輸出57,則對於其他數據這個程序都不正確。
答案
import java.util.*;
public class Main
{
public static void main(String args[])
{
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int b = sc.nextInt();
System.out.println(a + b);
}
}
第五題
問題描述
給定一個長度爲n的數列,將這個數列按從小到大的順序排列。1<=n<=200
輸入格式
第一行爲一個整數n。
第二行包含n個整數,爲待排序的數,每個整數的絕對值小於10000。
輸出格式
輸出一行,按從小到大的順序輸出排序後的數列。
樣例輸入
5
8 3 6 4 9
樣例輸出
3 4 6 8 9
答案
import java.util.*;
public class Main {
private static int n;
private static int a[];
private static int i;
private static int j;
private static int temp;
public static void main(String args[]){
@SuppressWarnings("resource")
Scanner input = new Scanner(System.in);
n = input.nextInt();//輸入個數
a = new int[n];
for(i = 0;i<n;i++){
a[i] = input.nextInt();//輸入值存在a數組裏
}
//冒泡排序
for(i = 0;i<n-1;i++){
for(j = 0;j<n-1-i;j++){
if(a[j]>a[j+1])
{
temp = a[j+1];
a[j+1] = a[j];
a[j] = temp;
}
}
}
for(i = 0;i<n;i++){
System.out.print(a[i]);
System.out.print(" ");
}
}
}
第六題
問題描述
123321是一個非常特殊的數,它從左邊讀和從右邊讀是一樣的。
輸入一個正整數n, 編程求所有這樣的五位和六位十進制數,滿足各位數字之和等於n 。
輸入格式
輸入一行,包含一個正整數n。
輸出格式
按從小到大的順序輸出滿足條件的整數,每個整數佔一行。
樣例輸入
52
樣例輸出
899998
989989
998899
數據規模和約定
1<=n<=54。
答案
import java.util.Scanner;
public class Main{
private static int in;
public static int hui(int n){
for(int i = 10000;i<1000000;i++){
int sum = 0;
int temp = i;
int len = 0;
while(temp!=0){
sum=sum*10+temp%10;
temp=temp/10;
len++;//累計位數以此判斷是5位數還是6位數
}
if(sum==i)//先把迴文數求出來,下面再來比較各位數字之和是否等於n
{
int a=i%10;//個位
int b=i/10%10;//十位
int c=i/100%10;//百位
if(5==len)
{
if(n==(2*a+2*b+c))
{
System.out.println(i);
}
}
if(6==len)
{
if(n==(2*a+2*b+2*c))
{
System.out.println(i);
}
}
}
}
return n;
}
public static void main(String args[]){
Scanner input = new Scanner(System.in);
in = input.nextInt();
hui(in);
}
}
第七題
問題描述
1221是一個非常特殊的數,它從左邊讀和從右邊讀是一樣的,編程求所有這樣的四位十進制數。
輸出格式
按從小到大的順序輸出滿足條件的四位十進制數。
答案
import java.util.*;
public class Main {
private static int n;
public static void main(String args[]){
//Scanner input = new Scanner(System.in);
//n = input.nextInt();
for(int i = 1000;i<10000;i++){
int a = i/1000;//千
int b = i/100%10;//百
int c = i/10%10;//十
int d = i%10;//個
if(a==d&&b==c){
System.out.println(i);
}
}
}
}
第八題
問題描述
153是一個非常特殊的數,它等於它的每位數字的立方和,即153=1*1*1+5*5*5+3*3*3。編程求所有滿足這種條件的三位十進制數。
輸出格式
按從小到大的順序輸出滿足條件的三位十進制數,每個數佔一行。
答案
public class Main{
public static void main(String args[]){
for(int i = 100;i<1000;i++){
int a1 = i/100;
int a2 = i/10%10;
int a3 = i%10;
if(a1*a1*a1+a2*a2*a2+a3*a3*a3==i){
System.out.println(i);
}
}
}
}