浙大 Java语言程序设计编程答案7
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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;
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;
}
}
/* 方法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。
例:括号内是说明 输入 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(); /*------------*/
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 是否为素数。
/*---------*/
n=Math.abs(n); count=countdigit(n,2);
System.out.println("count="+count); } } /*------------*/
static int countdigit(long number,int digit){ //统计整数number中数字digit的个数
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;
例:括号内是说明
输入:
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)
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;
}
}
/* 方法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+" ");
例:括号内是说明
输入:
3
(repeat=3)
1 10 (m=1, n=10)
20 100 (m=20, n=100)
1000 6000 (m=1000, n=6000)
输出:
112358
(1 到 10 之间的 Fibonacci 数)
21 34 55 89 (20 到 100 之间的 Fibonacci 数)
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 是否为素数。
例:括号内是说明 输入 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();
}
}
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+" ");
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;}
}
}
/* 方法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。
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);
实验 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 的阶乘。
for(ri=1; ri<=repeat; ri++){ n=in.nextInt(); /*---------*/
flag=prime(n);
if(flag) System.out.println("YES"); else System.out.println("NO"); } } /*------------*/
例:括号内是说明 输入: 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(); /*-----------*/
例:括号内是说明
输入:
3
(repeat=3)
-21902
2
345543
输出:
count=2
(-21902 中有 2 个 2)
count=1
Baidu Nhomakorabea
(有 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();
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(); /*---------*/
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;
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;
}
}
/* 方法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。
例:括号内是说明 输入 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(); /*------------*/
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 是否为素数。
/*---------*/
n=Math.abs(n); count=countdigit(n,2);
System.out.println("count="+count); } } /*------------*/
static int countdigit(long number,int digit){ //统计整数number中数字digit的个数
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;
例:括号内是说明
输入:
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)
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;
}
}
/* 方法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+" ");
例:括号内是说明
输入:
3
(repeat=3)
1 10 (m=1, n=10)
20 100 (m=20, n=100)
1000 6000 (m=1000, n=6000)
输出:
112358
(1 到 10 之间的 Fibonacci 数)
21 34 55 89 (20 到 100 之间的 Fibonacci 数)
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 是否为素数。
例:括号内是说明 输入 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();
}
}
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+" ");
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;}
}
}
/* 方法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。
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);
实验 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 的阶乘。
for(ri=1; ri<=repeat; ri++){ n=in.nextInt(); /*---------*/
flag=prime(n);
if(flag) System.out.println("YES"); else System.out.println("NO"); } } /*------------*/
例:括号内是说明 输入: 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(); /*-----------*/
例:括号内是说明
输入:
3
(repeat=3)
-21902
2
345543
输出:
count=2
(-21902 中有 2 个 2)
count=1
Baidu Nhomakorabea
(有 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();
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(); /*---------*/