咋们继续没有做完的题
实战演练下
3.14编写程序,提示用户输入一个在1-15之间的整数
/*
数据:给出的数字模型
1.for循环每个的行数
2.for循环没行的空隔
3.for循环每行的列数
分析
4 3 2 1 2 3 4
-3 -2 -2 0 1 2 3
第4行 x∈[-3,3] y=|x|+1
第5行 x∈[-4,4] y=|x|+1
*/
import java.util.Scanner;
class Demo03_14{
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
System.out.print("请输入行数:");
int line=scanner.nextInt();
for(int i=1;i<=line;i++){ //行数
for(int k=1;k<=(line-i);k++){ //空格
System.out.print(" ");
}
for(int x=-(i-1);x<=i-1;x++){ //列
if(line<10){
System.out.printf("%-2d",Math.abs(x)+1);
}else{
System.out.printf("%-3d",Math.abs(x)+1);
}
}
System.out.println();
}
}
}
%-3d表示的是向左对齐,不够的补空格
3.15使用嵌套的循环语句,用四个独立的程序打开
/*
数据:给出的数字模型
步骤:
1.for循环每个的行数
2.for循环每行的列数
*/
class Demo03_15{
public static void main(String[] args){
//第一个
for(int i=1;i<=6;i++){ //行数
for(int j=1;j<=i;j++){ //列
System.out.print(j+" ");
}
System.out.println();//换行
}
//第二个
System.out.println("==========");
for(int i=1;i<=6;i++){ //行数
for(int j=1;j<=7-i;j++){ //列
System.out.print(j+" "); //输出数字
}
System.out.println(); //换行
}
//第三个
System.out.println("==========");
for(int i=1;i<=6;i++){ //行数
for(int k=1;k<=6-i;k++){ //空格数
System.out.print(" ");
}
for(int j=i;j>=1;j--){
System.out.print(j+" "); //输出数
}
System.out.println();///换行
}
//第四个
System.out.println("==========");
for(int i=1;i<=6;i++){ //行数
for(int k=1;k<=i-1;k++){ //每行空格数
System.out.print(" "); //列
}
for(int j=1;j<=7-i;j++){
System.out.print(j+" ");
}
System.out.println();
}
}
}
3.16打印金字塔形状的数字
/*数据:数据:给出的数字模型
1.for循环每个的行数
2.for循环没行的空隔
3.for循环每行的列数
分析:
第4行
1 2 4 8 4 2 1
0 1 2 3 2 1 0
x -3 -2 -1 0 1 2 3
第5行
1 2 4 8 16 8 4 2 1
0 1 2 3 4 3 2 1 0
x -4-3-2-1 0 1 2 3 4
class Demo03_16{
public static void main(String[] args){
for(int i=1;i<=8;i++){
for(int k=1;k<=8-i;k++){
System.out.print(" ");
}
for(int x=-(i-1);x<=i-1;x++){
System.out.printf("%4d",(int)Math.pow(2,i-1-Math.abs(x)));
}
System.out.println();
}
}
}
/*
提示:
对于打印一些对称性的三角形图案或者是类似的问题
尽量向绝对值考虑
*/
3.17打印2-1000包括2和1000之间的所有素数,每行显示8个素数,数字之间用一个空格字符隔开
步骤:1.输入一个整数
2.从2开始除,知道自己本身,如果,除的过程当中有余数为0的,证明他不是素数,反之
/*
思路分析:
素数就是这个数从2开始一直到除自己以外的数相除有余数
*/
class Demo03_17{
public static void main(String[] args){
int count = 0; //标记素数的个数
for(int num = 2;num <= 1000;num++){ //2-1000的数
boolean flag = true; //对这个数标记,一开始为true
for(int i = 2;i <= num - 1;i++){
if(num % i == 0){
flag = false; //不是素数为false
break;
}
}
if (flag){
count++;
System.out.println(num); //输出素数
if(count%8 == 0){ //一行输出8个数
System.out.println();
}
}
}
}
}
3.18计算π
咋们对于这道题的思路,分母是2i-1,但是他偶数的时候是负数,所以,咋们可以加一句flag =-flag;他没执行完一次,就去负,刚好满足了,偶数为负的需求
class Test18{
public static void main(String[] args){
Scanner in = new Scanner(System.in);
System.out.println("请输入一个数字:");
int imax=in.nextInt();
double sum=0;
double flag = 1;
for(int i=1;i<=max;i++){
//sum+=Math.pow(-1.0,i+1)/(2*i-1);
sum+=flag/(2*i-1);
flag=-flag;
}
double pi=sum*4;
System.out.println(pi);
}
}
3.19计算e
分析这道题,可以看到分母均为阶层,所以,我们可以把1看为是1/0!
import java.util.*;
class Test19{
public static void main(String[] args){
Scanner in = new Scanner(System.in);
System.out.println("请输入一个数字:");
int imax = in.nextInt();
double e=1;
double item = 1.0;
for(int i=1;i<=imax;i++){
item=item*i;
e+=1/item;
}
System.out.println(e);
}
}
3.20编写程序,显示从101到2100期间所有的闰年,每行显示10个,数字之间用一个空格字符隔开,同时显示着期间闰年的数目。
咋们需要知道闰年怎么算的,年份%4==0或者年份%100!=0,还有就是特殊的年份,例如千禧年,他是年份%400==0
class Test20{
public static void main(String[] args){
int count=0;
for(int i=101;i<=2100;i++){
if(i%4==0&&i%100!=0||i%400==0){
count++;
System.out.println(i+" ");
if(count%10==0){
System.out.println();
}
}
}
System.out.println("\n闰年一共"+count+"个");
}
}
3.21完全数
步骤:1.输入一个整数
2.从2开始除,如果他的余数为0就进行相加,直到没有没有之时,
3.若是相加的结果,与输入的整数相等,则输出
class Test21{
public static void main(String[] args){
for(int n=2;n<=10000;n++){
int sum=0;
for(int i=1;i<=n/2;i++){
if(n%i==0){
sum+=i;
}
}
if(n==sum){
System.out.println("完全数"+n);
}
}
}
}
3.22剪刀石头布,连续玩这个游戏
可以在原先的程序之上,加一些条件,当**为2时,谁赢
import java.util.Scanner;
pubilc class Test22{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
Random random = new Random();
int usrWin=0;
int comWin=0;
while(true){
System.out.println("请输入 剪刀0 石头1 布2:");
int usr = scanner.nextInt();
int com = random.nextInt(3);/*Random随机函数*/
String usrStr="";
String comStr="";
switch(usr){
case 0:
usrStr = "剪刀";
break;
case1:
usrStr = "石头";
break;
case 2:
usrStr = "布";
break;
}
swith(com){
case 0:
comStr = "剪刀";
break;
case 1:
comStr = "石头";
break;
case 2:
comStr = "布";
break;
}
if(usr==com){
System.out.printf("用户是%s,电脑是%s,平局",usrStr,comStr);
}else if(usr==0&&com==2 || usr==1&&com==0 || usr==2&&com==1){
System.out.printf("用户是%s,电脑是%s,用户赢",usrStr,comStr);
usrwin++;
}else{
System.out.printf("用户是%s,电脑是%s,用户输",usrStr,comStr);
comwin++;
}
if(usrWin==2 || comWin==2){
break;
}
}
if(usrWin==2){
System.out.println("最终玩家赢!");
}
else{
System.out.println("最终电脑赢!");
}
}
}
3.23
十进制到二进制,提示用户输入十进制整数,然后显示对应的二进制值,这个程序不要使用Java的Interger方法
思路:十进制到二进制,就是一直除二,直到1,然后他们的余数从下到上进行输出,所以,咋们可以他每次取余,咋们就将结果加到字符串上
Class Test23{
public static void main(String[] args){
Scanner in =new Scanner(System.in);
System.out.println();
int sum = in.nextInt();
String binStr=" ";
While(true){
binStr=num%2+binStr;
num/=2;
if(num==0){
break;
}
}
System.out.println(binStr);
}
}
3.24最大数的出现次数
步骤:1.首先输入一串数字
2.两两进行比较,如果大于,就赋值,继续比较,如果后面有与最大数一样的数字就加1
import java.util.Scanner;
class Test24{
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
int num=0;
int max=0;
int count=0;
System.out.print("请输入数字:");
while(true){
num=scanner.nextInt();
if(num==0){
break;
}else if(num>max){
max=num;
count=1;
}else if(num==max){
count++;
}
}
System.out.println("max="+max+",count="+count);
}
}
给大家分享一个桌面壁纸