浙大java方宁上机实验练习08答案

importjava.util.Scanner;

public class Test50006{

public static void main(String args[]){ intri,repeat;

inti, m, n;

long f;

Scanner in=new Scanner(System.in); repeat=in.nextInt();

for(ri=1; ri<=repeat; ri++){

m=in.nextInt();

n=in.nextInt();

i = 1;

while(true)

{

f = fib(i++);

if(f > n)break;

if(f >= m)System.out.print(f + " "); }

System.out.println();

}

}

static long fib(int n)

{

int a = 0, b = 1, i ,temp;

for(i=1;i<=n;i++)

{

temp = a + b; a = b; b = temp; }

return a;

}

}

importjava.util.Scanner;

public class Test50007{

public static void main(String args[]){

intri,repeat;

inti, m, n;

Scanner in=new Scanner(System.in);

repeat=in.nextInt();

for(ri=1;ri<=repeat;ri++){

m=in.nextInt();

n=in.nextInt();

for(i=m;i<=n;i++)

if(i==factorsum(i))System.out.print(i+" "); System.out.println();

}

}

staticintfactorsum(int number)

{

intans=1;

for(inti=2;i<=Math.sqrt(number);i++)

if(number%i==0){ans+=i;if(i*i!=number)ans+=number/i;} returnans;

}

}

importjava.util.Scanner;

public class Test50008{

public static void main(String args[]){ intri,repeat;

inti, m, n;

Scanner in=new Scanner(System.in); repeat=in.nextInt();

for(ri=1;ri<=repeat;ri++){

m=in.nextInt();

n=in.nextInt();

for(i = m; i<= n; i++)

if(is(i))System.out.print(i+" "); System.out.println();

}

}

staticboolean is(int number)

{

int digit, ans = 0, temp = number; while(number!=0)

{

digit = number % 10;

ans += digit * digit * digit; number /= 10;

}

returnans == temp;

}

}

importjava.util.Scanner;

public class Test50009{

public static void main(String args[]){ intri,repeat;

long n, res;

Scanner in=new Scanner(System.in); repeat=in.nextInt();

for(ri=1;ri<=repeat;ri++){

n=in.nextInt();

res = reverse(n);

System.out.println(res); }

}

static long reverse(long number) {

longans = 0;

while(number!=0)

{

ans = ans * 10 + number % 10; number /= 10;

}

returnans;

}

}

importjava.util.Scanner;

public class Test50010{

public static void main(String args[]){ intri,repeat;

inti,n;

Scanner in=new Scanner(System.in); repeat=in.nextInt();

for(ri=1;ri<=repeat;ri++){

n=in.nextInt();

if(n==0)System.out.print(0); elsedectobin(n);

System.out.println();

}

}

static void dectobin(int n)

{

if(n==0)return;

dectobin(n>>1);

System.out.print(n%2);

}

}

importjava.util.Scanner;

public class T {

public static void main(String args[]) {

intri, repeat;

inta,b,c,maximun;

Scanner in = new Scanner(System.in);

repeat = in.nextInt();

for (ri = 1; ri<= repeat; ri++) {

a = in.nextInt();

b = in.nextInt();

c=in.nextInt();

maximun = max(a, b, c);

System.out.println("max("+a+","+b+","+c+")="+maximun); }

}

staticint max(int a, int b, int c)

{

intans = a;

if(ans< b)ans = b;

if(ans< c)ans = c;

returnans;

}

}

 

第二篇:浙大 Java语言程序设计编程答案7

实验8 Method的使用

程序填空,不要改变与输入输出有关的语句。

1. 求1 + 1/2! +....+ 1/n!

输入一个正整数repeat (0<repeat<10),做repeat次下列运算: 输入1 个正整数n,计算 s 的前n项的和(保留 4 位小数)。

s = 1 + 1/2! +....+ 1/n!

要求定义并调用函数fact(n)计算n的阶乘。

例:括号内是说明

输入:

2 (repeat=2)

2 (n=2)

10 (n=10)

输出:

1.5

1.7183

public class Test50001 {

public static void main(String[] args) {

int ri,repeat;

int i,n;

double s;

Scanner in=new Scanner(System.in);

repeat=in.nextInt();

for(ri=1;ri<=repeat;ri++){

n=in.nextInt();

/*-----------*/

s=0;

for(i=1;i<=n;i++)

s+=1.0/fact(i);

System.out.println((long)(s*10000+0.5)/10000.); }

}

/*---------------*/

static double fact(int n) {

int i;

double f=1;

for(i=1;i<=n;i++)

f*=i;

return f;

}

}

/* 方法fact(n)也可以用以下递归算法设计

static double fact(int n) {

if(n==1)

return 1;

else

return n*fact(n-1);

}

*/

2. 求a+aa+aaa+aa…a

输入一个正整数repeat (0<repeat<10),做repeat次下列运算:

输入2个正整数a和n, 求a+aa+aaa+aa…a(n个a)之和。

要求定义并调用函数fn(a,n),它的功能是返回aa…a(n个a)。例如,fn(3,2)的返回值是33。

例:括号内是说明

输入

2 (repeat=2)

2 3 (a=2, n=3)

8 5 (a=8, n=5)

输出

246 (2+22+222)

98760 (8+88+888+8888+88888)

import java.util.Scanner;

public class Test50002{

public static void main(String args[]){

int ri, repeat;

int i, n,a;

long sn;

Scanner in=new Scanner(System.in);

repeat=in.nextInt();

for(ri=1; ri<=repeat; ri++){

a=in.nextInt();

n=in.nextInt();

/*------------*/

sn=0;

for(i=1;i<=n;i++)

sn+=fn(a,i);

System.out.println(sn);

}

}

/*------------*/

static int fn(int a,int n){

int s=0;

for(int i=1;i<=n;i++)

s=s*10+a;

return s;

}

}

/* 方法fn()也可以用以下递归算法设计

static int fn(int a,int n){

if (n==1)

return a;

else

return fn(a,n-1)*10+a;

}

*/

3. 统计一个整数中数字的个数

输入一个正整数repeat (0<repeat<10),做repeat次下列运算:

读入1 个整数,统计并输出该数中2的个数。

要求定义并调用函数countdigit(number,digit),它的功能是统计整数number中数字digit的个数。例如,countdigit(10090,0)的返回值是3。

例:括号内是说明

输入:

3 (repeat=3)

-21902

2

345543

输出:

count=2 (-21902中有2个2)

count=1 (有1个2)

count=0 (345543中没有2)

import java.util.Scanner;

public class Test50003{

public static void main(String args[]){

int ri, repeat;

int count;

long n;

Scanner in=new Scanner(System.in);

repeat=in.nextInt();

for(ri=1; ri<=repeat; ri++){

n=in.nextInt();

/*---------*/

n=Math.abs(n);

count=countdigit(n,2);

System.out.println("count="+count);

}

}

/*------------*/

static int countdigit(long number,int digit){

//统计整数number中数字digit的个数

int a,c=0;

while(number>0){

a=(int)(number%10);

if(a==digit)c++;

number=number/10;

}

return c;

}

}

4. 判断素数

输入一个正整数repeat (0<repeat<10),做repeat次下列运算:

输入一个正整数n,如果它是素数,输出"YES",否则,输出"NO"(素数就是只能被1和自身整除的正整数,1不是素数,2是素数)。

要求定义并调用函数prime(m)判断m是否为素数。

例:括号内是说明

输入

4 (repeat=4)

1 2 9 17

输出

NO (1不是素数)

YES (2是素数)

NO (9不是素数)

YES (17是素数)

import java.util.Scanner;

public class Test50004{

public static void main(String args[]){

int ri, repeat,n;

boolean flag;

Scanner in=new Scanner(System.in);

repeat=in.nextInt();

for(ri=1; ri<=repeat; ri++){

n=in.nextInt();

/*---------*/

flag=prime(n);

if(flag) System.out.println("YES");

else System.out.println("NO");

}

}

/*------------*/

static boolean prime(int m){

boolean flag=true;

if(m==1)flag=false;

for(int i=2;i<=m-1;i++)

if(m%i==0)

{ flag=false; break; }

return flag;

}

}

5. 统计素数并求和

输入一个正整数repeat (0<repeat<10),做repeat次下列运算:

输入2 个正整数m和n(1<=m,n<=500),统计并输出m 和n之间的素数的个数以及这些素数的和(素数就是只能被1和自身整除的正整数,1不是素数,2是素数)。

要求定义并调用函数prime(m)判断m是否为素数。

例:括号内是说明

输入:

3 (repeat=3)

1 10 (m=1, n=10)

20 35 (m=20, n=35)

14 16 (m=14, n=16)

输出:

count=4, sum=17 (1到10之间有4个素数:2,3,5,7)

count=3, sum=83 (20到35之间有3个素数:23, 29, 31)

count=0, sum=0 (14到16之间没有素数)

import java.util.Scanner;

public class Test50005{

public static void main(String args[]){

int ri, repeat;

int count, i, m, n, sum;

Scanner in=new Scanner(System.in);

repeat=in.nextInt(); for(ri=1; ri<=repeat; ri++){ m=in.nextInt(); n=in.nextInt(); /*---------*/

count=0; sum=0; for(i=m;i<=n;i++) if(prime(i)){count++; sum+=i;}

System.out.println("count="+count+", sum="+sum);

}

}

/*------------*/

static boolean prime(int m){

boolean flag=true;

if(m==1)flag=false;

for(int i=2;i<=m-1;i++)

if(m%i==0)

{ flag=false; break; }

return flag;

}

}

6. 输出 Fibonacci 序列

输入一个正整数repeat (0<repeat<10),做repeat次下列运算:

输入2 个正整数m和n(1<=m,n<=10000),输出m 和n之间所有的Fibonacci数。

Fibonacci 序列(第1项起):1 1 2 3 5 8 13 21 ......

要求定义并调用函数fib(n),它的功能是返回第n项Fibonacci数。例如,fib(7)的返回值是13。 输出语句:System.out.print(f+" ");

例:括号内是说明

输入:

3 (repeat=3)

1 10 (m=1, n=10)

20 100 (m=20, n=100)

1000 6000 (m=1000, n=6000)

输出:

1 1 2 3 5 8 (1到10之间的Fibonacci数)

21 34 55 89 (20到100之间的Fibonacci数)

1597 2584 4181 (1000到6000之间的Fibonacci数)

import java.util.Scanner;

public class Test50006{

public static void main(String args[]){

int ri,repeat;

int i, m, n;

long f;

Scanner in=new Scanner(System.in);

repeat=in.nextInt();

for(ri=1; ri<=repeat; ri++){

m=in.nextInt();

n=in.nextInt();

/*---------*/

i=1;

f=1;

while(f<=n){

if(f>=m) System.out.print(f+" "); i++;

f=fib(i);

}

System.out.println();

}

}

/*------------*/

static long fib(int n){

int i;

long a=1,b=1,f=1;

for(i=3;i<=n;i++){ //从第3项开始计算 f=a+b;

a=b;

b=f;

}

return f;

}

}

/* 方法fib(n)用递归实现

static long fib(int n){

if(n==1||n==2) return 1;

else return fib(n-1)+fib(n-2);

}

*/

7. 求完数

输入一个正整数repeat (0<repeat<10),做repeat次下列运算:

输入2 个正整数m和n(1<=m,n<=1000),输出m 到n之间的所有完数(完数就是因子和与它本身相等的数)。 要求定义并调用函数factorsum(number),它的功能是返回number的因子和。例如,factorsum(12)的返回值是16(1+2+3+4+6)。

输出语句:System.out.print(i+" ");

例:括号内是说明

输入:

2 (repeat=2)

20 500 (m=100, n=400)

1 100 (m=1, n=100)

输出:

28 496

1 6 28

import java.util.Scanner;

public class Test50007{

public static void main(String args[]){

int ri,repeat;

int i, m, n;

Scanner in=new Scanner(System.in);

repeat=in.nextInt();

for(ri=1;ri<=repeat;ri++){

m=in.nextInt();

n=in.nextInt();

/*---------*/

for(i=m;i<=n;i++)

if(i==factorsum(i))

System.out.print(i+" ");

System.out.println();

}

}

/*---------*/

static int factorsum(int number){

int sum=0;

if(number==1)sum=1;

for(int i=1;i<=number-1;i++)

if(number%i==0)sum+=i;

return sum;

}

}

8. 求各位数字的立方和等于它本身的数

输入一个正整数repeat (0<repeat<10),做repeat次下列运算:

输入2 个正整数m和n(1<=m,n<=1000),输出m 到n之间的所有满足各位数字的立方和等于它本身的数。 要求定义并调用函数is(number)判断number的各位数字之立方和是否等于它本身。

输出语句:System.out.print(i+" ");

例:括号内是说明

输入:

2 (repeat=2)

100 400 (m=100, n=400)

1 100 (m=1, n=100)

输出:

153 370 371 (1*1*1+5*5*5+3*3*3=153; 3*3*3+7*7*7=370; 3*3*3+7*7*7+1*1*1=371)

1

import java.util.Scanner;

public class Test50008{

public static void main(String args[]){

int ri,repeat;

int i, m, n;

Scanner in=new Scanner(System.in);

repeat=in.nextInt();

for(ri=1;ri<=repeat;ri++){

m=in.nextInt();

n=in.nextInt();

/*---------*/

for(i=m;i<=n;i++)

if(is(i))

System.out.print(i+" ");

System.out.println();

}

}

/*---------*/

static boolean is(int number) {

int sum=0,n,digit;

n=number;

while(n>0){

digit=n%10;

n=n/10;

sum+=digit*digit*digit;

}

if(number==sum)

return true;

else

return false; }

}

相关推荐