今天的主要内容是java语句的练习
if else 语句
流程框图
public static void main(String [] args){
int x = 0;
Scanner scanner = new Scanner(System.in);
x = scanner.nextInt();
if(x<=1){
System.out.println(x);
}else if(x>=10){
System.out.println(4*x);
}else{
System.out.println(3*x-2);
}
}
输出
输入一个十进制的数,将它转换成二进制,并且输出有几个1
设计思路:
首先,想要知道这个数转换成二进制有多少位,可以将它和2的n次幂比较大小,当这个数刚好小于2的m次幂时,这个数转换成二进制就是m-1位。
然后开启一个循环,计算输入的数s除以2的余数,如果是1,则计数器+1,并且简历一个字符串+1,如果是0就只有字符串+0。判断完成后,s向右移一位,再循环。
最后将字符串反向输出就可以得到该数字的二进制表示形式(这里我用的网上的方法,等学了数组后再操作一次)直接输出计数器的值就是1的个数。
import java.util.Scanner;
public class ErJinZhi {
public static void main(String[] args){
int s = 0;
int count=0;
int m = 1;
int n = 0;
String str = "";
Scanner scanner = new Scanner(System.in);
s = scanner.nextInt();
while(m<=s){
m*=2;
n++;
}
System.out.println(n+"位");
for(int j = 0;j<n;j++){
if(s%2==1){
count++;
str+=1;
}else{
str+=0;
}
s>>=1;
}
System.out.println(count+"个1");
System.out.println(new StringBuilder(str).reverse().toString());
}
}
输出结果
计算1+3+5+…(2(20)-1)【里面是20次幂】
public static void main(String[] args){
int count = 0;
int i = 0;
int k = 1;
for(int j = 1; j <= 20; j++){
k *= 2;
i = k-1;
count += i;
}
System.out.println(count);
}
输出结果:2097130
计算1-1/2+1/3-1/4……..-1/99+1/100
设计思路:分数可以用除法来实现,正负号可以用(-1)的n次幂来实现
注意事项:要用浮点类型的数据来计算,因为需要用到小数部分相加减。记得用强制转换。
public static void main(String[] args) {
int n = 1;
float s = 0;
int j = -1;
while(n<=100){
j = -j;
float m = (float)1/n;//强制转换因为前
//面初始化的时候没用到浮点型
s +=m;
n++;
System.out.println(m);
}
System.out.println(s);
}
运行结果:5.187378
1加到10000去掉所有末位是3的数字
思路:循环中加入判断,该数字除以10取余数,余数等于3的时候,跳过循环。
public static void main(String[] args){
int sum = 0;
for(int i = 1; i <= 10000; i++){
if(i % 10 == 3){
continue;
}
sum = sum + i;
}
System.out.println(sum);
}
输出结果:45007000
用*打印出一个金字塔
设计思路:
用两个for循环的嵌套,即可解决问题。
记得还要设计一个for循环打印空格。
public static void main(String[] args){
int s = 0;
System.out.print("需要几层金字塔:");
Scanner scanner = new Scanner(System.in);
s = scanner.nextInt();
for(int x = 1; x <= s; x++){
for(int z = 0; z <=s-x-1; z++){
System.out.print(" ");
}
for(int y = 1; y <= 2*x-1; y++){
System.out.print("* ");
}
System.out.println();
}
}
输出结果:
用for循环打印一个九九乘法表
设计思路:和上面的程序差不多,不同的是小循环中的变量是乘法表单项的前一个数,大循环中的变量是乘法表单项的第二个数。最后连接字符串输出。
import java.util.Scanner;
//99乘法表
/*
* 大循环中的变量是乘法表单项的前一个数,小循环中的变量是乘法表单项的第二个数
*
* */
public class ChengFaBiao {
public static void main(String[] args){
int s = 0;
System.out.print("输入需要到多少层的乘法表:");
Scanner scanner = new Scanner(System.in);
s = scanner.nextInt();
for(int x = 1; x <= s; x++){
for(int y = 1; y <= x; y++){
System.out.print(y+"×"+x+"="+x*y+"\t");
}
System.out.println();
}
}
}
运行结果:
输出1000以内的水仙花数
水仙花数是指一个三位数,它的三个数位上的数的三次方的和等于它本身。
设计思路:将循环的数先对100求余数,得到百位的数字,然后除以10后对10求余数,得到十位数字,再对10求余数,的个位数字,将这三个数字的三次方加起来,再和本身比较即可。
public static void main(String[] args){
int i = 0;
for(i = 100;i<1000;i++){
int bai = i/100;
int shi = i/10%10;
int ge = i%10;
if(i==ge*ge*ge+shi*shi*shi+bai*bai*bai){
System.out.println("水仙花数是:"+i);
}
}
for(int a = 1;a< 10;a++){
for(int b = 0;b <10;b++){
for(int c = 0;c <10;c++){
if(a*a*a+b*b*b+c*c*c == a*100+b*10+c){
System.out.println("水仙花数是:"+(a*100+b*10+c));
}
}
}
}
//以上有两种求水仙花数的方法。
输出结果
找出2-100中所有的素数
思路:如何判断一个数是不是素数,判断它能否被除了1和本身的其他数整除即可
public static void main(String [] args){
//初始化变量
int i = 1;
int count = 0;
for(i = 1;i<=100;i++){
int k = i-1;
if(k == 0){
continue;
}
else if(k == 1){
System.out.print(i+" ");
count++;
}
else{
while(true){
k--;
if(k == 1){
System.out.print(i+" ");
count++;
break;
}
else if(i%k==0){
break;
}
}
}
}
System.out.println("\r\n素数个数为:"+count);
}
输出结果:
斐波那契数列求和
设计思路:斐波那契数列就是 后一个数是前两个数的和 的数列,初始化三个变量然后循环相加就可以解决这个问题。
public static void main(String[] args){
int sum1 = 1;
int sum2 = 0;
int sum = 0;
for(int i = 1;i <= 20; i++){
if(i==1){
continue;
}else{
sum2 = sum1;
sum1 = sum1+sum;
sum = sum2;
System.out.println(sum1);
}
}
}
输出结果:6765
拓展:如果兔子生长三个月才能生兔子
那么规律会发生变化,一个数就成了它前一位的数和前三位的数相加之和。
public static void main(String[] args){
int a = 1;
int b = 0;
int c = 0;
int d = 0;
for(int i = 1;i <= 20; i++){
if(i==1){
System.out.println("第"+i+"个月有"+a+"只");
continue;
}else if(i==2){
b = a+1;
System.out.println("第"+i+"个月有"+b+"只");
}else if(i==3){
c = b+1;
System.out.println("第"+i+"个月有"+c+"只");
}else{
d = a + c;
a = b;
b = c;
c = d;
System.out.println("第"+i+"个月有"+d+"只");
}
}
}
输出结果:
完全数
一个数所有的因子之和等于它本身的就是一个完全数。
public static void main(String [] args){
for(int x = 1; x < 1000; x++){
int sum = 0;
for(int y = 1; y<x; y++){
if(x%y==0){
sum += y;
}
}
if(sum == x){
System.out.println(x);
}
}
}
输出结果:
因式分解
思路:将输入的数字从2开始除,然后输出能除尽的最小的数字除过一次后,将那个数除以最小的因式,然后再从2开始除循环到某一次只能除到本身的时候,把所有的因式用乘号连接起来输出。
import java.util.Scanner;
public class LianXi02 {
public static void main(String[] args){
//初始化
int s = 0;
int i = 2;
//系统输入
Scanner sc = new Scanner(System.in);
s = sc.nextInt();
//循环
while(i<=s){
if(i==s){ //跳出循环的方法,检测到除数和被除数相同
System.out.print(s);
break;
}
else if(s%i==0){ //能除尽,说明存在最小因式,输出这个因式,然后把它除去
System.out.print(i+"*");
s = s/i;
}
else{
i++; //除数的递增,不能除尽,同时也小于被除数
}
}
}
}
输出结果:
求两个数的最大公因数和最小公倍数
思路:
最大公约数:
把其中一个数从自身-1开始除,能除尽时,再去除另一个,当两个都能除尽时,输出最大公约数最小公倍数:把其中一个数从2开始除,能除尽时,再去除另一个,当两个都能除尽时,输出最小公倍数。
import java.util.*;
public class LianXi03 {
public static void main(String[] args){
int m;
int n; //初始化
Scanner sc1 = new Scanner(System.in);
Scanner sc2 = new Scanner(System.in);//获取系统输入
m = sc1.nextInt();
n = sc2.nextInt();
for(int a = m-1;a>0;a--){
if(m%a==0){
if(n%a==0){
System.out.println("最大公约数为:"+a);
break;
}
}
}
for(int b = 2; b < m; b++){
if(m%b==0){
if(n%b==0){
System.out.println("最小公倍数为:"+b);
break;
}
}
}
}
}
输出结果: