目录
从控制台输入一个正整数,计算该数的阶乘,例如:输入5,阶乘为54321
计算1000以内不能被7整除的整数之和
/*
计算1000以内不能被7整除的整数之和
1、解决一个问题的时候,可以先使用汉语描述思路
2、复杂的问题可以一步一步去实现,没必要一下全部实现。
分步骤:
1、从1循环到1000
2、不能被7整除的相加
*/
public class ConWork01 {
public static void main(String[] args){
int s=0;//和
System.out.print("可以整除7的数:");
for(int i=1;i<=1000;i++) {
if (i % 7 != 0) {
s = s + i;
} else {
System.out.print(+i+" ");
}
}
System.out.println("\n1000以内不能被7整除的数的和:"+s);
}
}
计算:1+2-3+4-5+6-7+·····+100的结果
/*
计算:1+2-3+4-5+6-7+·····+100的结果
规律:加偶数减奇数
*/
public class ConWork02 {
public static void main(String[] args){
//循环过程中取出每个值,偶数的加,奇数的减
int sum =1;//奇数减,但是由题意得1为加,所以默认值设为1
//或者:sum=2,i从1开始,由于1为加,所以减1之后还要和要加1再加1所以为2
for(int i=2;i<=100;i++){
if(i%2==0){
sum += i;
}else{
sum -= i;
}
}
System.out.println("和为:"+sum);
}
}
从控制台输入一个正整数,计算该数的阶乘,例如:输入5,阶乘为54321
/*
从控制台输入一个正整数,计算该数的阶乘,例如:输入5,阶乘为5*4*3*2*1
*/
public class ConWork03 {
public static void main(String[] args){
System.out.println("请输入一个正整数:");
java.util.Scanner s= new java.util.Scanner(System.in);
int i=s.nextInt();
int result= 1;//因为是相乘,所以这里不能是0,因为0*任何数=0
for(int j=i;j>1;j--){
result *=j;//result= result*j4
}
System.out.println(i+"的阶乘运算结果为:"+result);
}
}
质数判断
/*
控制台输出一个数,判断是否为质数
质数:除了1和本身没有其他的数可以整除
思路:取除数从2开始,一直到这个数-1,关系:<这个数
*/
public class ConWork04 {
public static void main(String[] args){
System.out.print("请输入数字:");
java.util.Scanner s= new java.util.Scanner(System.in);
int i=s.nextInt();
//可以在外面准备一个布尔类型的标记。
boolean prime=true;//默认true表示为质数。
for(int j=2;j<i;j++){
if(i%j==0){
prime=false;
break;
}
}
System.out.println(i+(prime ? "是": "不是")+"质数");
}
}
输出星号图形——*金字塔
/*
从键盘接收一个正整数,该整数作为行数,以这个正整数为行数,输出以下图形
* 1
*** 2
***** 3
******* 4
********* 5
思路:
1、先做外层循环,以输入的数作为行数,要求要从1一直输出到指定的数
2、可以看出*的数为:1 3 5 7 9 11,是奇数。
:1 2 3 4 5 6
找出行数与奇数之间的数字关系,可以发现奇数的数值=行数的数值*2-1,也就是i*2-1
注意行数是当前的行数,而不是所指定的行数,行数跟随i变化,直到rows
根据提供图形,需要在*之前进行缩进,而需要缩进的数量为:指定行数-当前行数
(此处的缩进指的是空格),注意这里的缩进是放在内层循环之前,因为这是每行之前的缩进
而不是每个*之前的缩进。
public class ConWork05 {
public static void main(String[] args){
System.out.print("请输入一个正整数作为行数:");
java.util.Scanner s= new java.util.Scanner(System.in);
int rows=s.nextInt();
for(int i=1;i<=rows;i++){//行数
for(int k=1; k<=(rows-i);k++){
System.out.print(" ");
}
for(int j=1;j<=(i*2-1);j++){
System.out.print("*");
}
System.out.println("");
}
}
}
*/
/*
从键盘接收一个正整数,该整数作为行数,以这个正整数为行数,输出以下图形
* 1 中间的*之前缩进8
* * * 2 中间的*之前缩进6个
* * * * * 3 中间的*之前缩进4个
* * * * * * * 4 中间的*之前缩进2个
* * * * * * * * * 5 中间的*之前缩进1个
思路:
1、先做外层循环,以输入的数作为行数,要求要从1一直输出到指定的数
2、可以看出*的数为:1 3 5 7 9 11,是奇数。
:1 2 3 4 5 6
找出行数与奇数之间的数字关系,可以发现奇数的数值=行数的数值*2-1,也就是i*2-1
注意行数是当前的行数,而不是所指定的行数,行数跟随i变化,直到rows
根据提供图形,需要在*之前进行缩进,而需要缩进的数量为:指定行数*2-当前行数*2
就是:rows*2-i*2(此处的缩进指的是空格),注意这里的缩进是放在内层循环之前
因为这是每行之前的缩进而不是每个*之前的缩进。
*/
public class ConWork05 {
public static void main(String[] args){
System.out.print("请输入一个正整数作为行数:");
java.util.Scanner s= new java.util.Scanner(System.in);
int rows=s.nextInt();
for(int i=1;i<=rows;i++){//行数
for(int k=1; k<=(rows*2-i*2);k++){
System.out.print(" ");
}
for(int j=1;j<=(i*2-1);j++){
System.out.print(" *");
}
System.out.println("");
}
}
}
/*
总结:
System.out.print("*");*钱不加空 ,缩进量:rows-i 其他不变
System.out.print(" *");每个*前加一个空,每行缩进量:2(rows-i) 其他不变
System.out.print(" * ");每个*前后加一个空,每行缩进量:3(rows-i) 其他不变
*/
结果:
请输入一个正整数作为行数:16
*
* * *
* * * * *
* * * * * * *
* * * * * * * * *
* * * * * * * * * * *
* * * * * * * * * * * * *
* * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
用for循环,尽量避免在循环外部输出更新表达式位置上的变量
/*
小芳的妈妈每天给他2.5元,她都会存起来,每当这一天是存钱的第5天或者5的倍数的话
她都会花6元,请问,经过多少天才可以存到一百元。
天: day 钱: 2.5元 钱的和:money
天数整除5或者钱的和整除5,钱的总数减去6.
当存的钱大于等于100时,输出天数。
**天数以及钱总数的增加不能在for循环的更新表达式位置上
用for循环,尽量避免在循环外部输出更新表达式位置上的变量
此处可以用while循环,只要money到达100及以上就停止循环。
*/
public class ConWork06 {
public static void main(String[] args){
double money=0;
int day=0;
while(money<100){
day++;//每循环一次天数加一
money += 2.5;//钱数+2.5
if(day%5==0){
money -= 6;
}
}
System.out.println("小芳"+day+"天存到了:"+money);
}
}
//使用for循环
//public class ConWork06 {
// public static void main(String[] args){
//
// double money=0;
// int day=0;
// for(;money<100;){
//
// day++;
// money += 2.5;
//
// if(day%5==0){
// money -=6;
// }
// }
// System.out.println("小芳"+day+"天存到了:"+money);
// }
//}
//以下写法是错误的。
//public class ConWork06 {
// public static void main(String[] args){
// double money=0;
// int day=0;
// for(day=1;money<100;day++){
// //在这里虽然74天已经存了101,但是由于day++已经运算了并且判断的是money的值
// //循环外输出的day是money已经到达条件了,然后经过自加一,由74——>75
// // 但是由于天数增加了才判断条件,所以这里循环外是错误的。
// //所以使用for循环时,避免在循环外输出自加1的变量。
// money += 2.5;
// if(day%5==0){
// money -=6;
// }
//
// System.out.println("小芳"+day+"天存到了:"+money);//74天101.0
// }
// System.out.println("小芳"+day+"天存到了:"+money);//75天101.0
// }
//}
完数
/*
一个数如果等于它的因子之和,这个数就是完数,例如:6 = 1 + 2 + 3 .找出1000以内的完数
思路:
1、输出1~1000中所有的数
2、找出这个数的因数,然后让他的因数相加
3、判断是不是相等,如果是的话再输出。
*/
public class ConWork07 {
public static void main(String[] args){
for(int i=1;i<=1000;i++){//取0~1000的数
int wan=0;//这里定义因数的和,没重新开始判断一个数,就把他的因数的和归零。
for(int j=2;j<=i/2;j++){//1不是完数,所以直接从2开始判断。
//取因数时,j只要小于i的一半就可以。因为因子除了1之外,最小的便是2
// 例如6在这里:取出1 2 3 4 5,只取小于一半的就可以。
//所以取i的一半,就是j<=i/2
//这里取出的数都是可能是这个数的因数的
if(i%j==0){//这里判断是不是这个数的因数,如果是的话,进行累加,
wan += j;
}
}
//每个数在此时以完成累加,判断他们是不是完数,如果是则输出。
if(i==wan){
System.out.println(i);
}
}
}
}
给一个不多于5位的正整数,判断其是几位数并逆序打印
/*
给一个不多于5位的正整数,
要求:
一、求它是几位数
二、逆序打印出各位数字
思路:判断是几位数,从高位开始判断
比如这个数是num:12345,
五位 num/10000 !=0//注意这里是除,而不是取余数。
四位 num/1000 !=0
三位 num/100 !=0
二位 num/10 !=0
一位 num/1 !=0
num%10=a 个位数
num/10%10=b 十位数
num/100%10=c 百位数
num/1000%10=d 千位数
num/10000=e 万位数
*/
public class ConWork08 {
public static void main(String[] args){
int a,b,c,d,e;
System.out.println("请输入一个不大于五位的数:");
java.util.Scanner s=new java.util.Scanner(System.in);
int num= s.nextInt();
String weishu;
if(num/10000!=0){
System.out.println(num+"是一个五位数");
a =num/10000;//万
b =num/1000%10;//千
c =num/100%10;//百
d =num/10%10;//十
e =num%10;//个
System.out.println("逆序打印为:"+e+d+c+b+a);
}else if(num/1000!=0){
System.out.println(num+"是一个四位数");
a =num/1000;//千
b =num/100%10;//百
c =num/10%10;//十
d =num%10;//个
System.out.println("逆序打印为:"+d+c+b+a);
}else if(num/100!=0){
System.out.println(num+"是一个三位数");
a =num/100%10;//百
b =num/10%10;//十
c =num%10;//个
System.out.println("逆序打印为:"+c+b+a);
}else if(num/10!=0){
System.out.println(num+"是一个二位数");
a =num/10%10;//十
b =num%10;//个
System.out.println("逆序打印为:"+b+a);
}else{
System.out.println(num+"是个位数");
a =num%10;//个
System.out.println("逆序打印为:"+a);
}
}
}