1、计算1000以内所有不能被7整除的整数之和。
算法思路:我们从1-1000,一个数一个数的判断。如果能被7整除,就不管它,如果不能被7整除,就将它累加。
代码:
public class CanNotDivi7 {
//计算1000以内不能被7整除的数的和。
public static void main(String[] args) {
int sum = 0;
int i = 1;
while(i <= 1000){
if(i%7 != 0){//判断当前数字能否被7整除,如果余数不为零说明不能被整除,这个i就要累加!
sum += i;
System.out.println(i);
}
i++;
}
System.out.println("1000以内不能被7整除的数字的和是:"+sum);
}
}
2、一张纸的厚度大约是0.08mm,对折多少次之后能达到或超过珠穆朗玛峰的高度(8848.13米)。
算法思路:一张纸每折叠一次,厚度就会增加二倍。折叠两次就是0.08*2^2,折叠五次就是0.08*2^5……
代码:
public class FoldPaper {
//一张纸的厚度大约是0.08mm,对折多少次之后能达到或超过珠穆朗玛峰的高度(8848.13米
public static void main(String[] args) {
double paperHigh = 0.08;//将纸厚度的单位化为米
int times = 0;
System.out.println(paperHigh);
while(paperHigh <= (8848.13*1000)){
times++;
paperHigh *= 2;
}
System.out.println("折叠"+times+"次之后纸的高度为"+paperHigh+",一张纸超过了珠穆朗玛峰");
}
}
3、任意输入一个整数(小于10位),输出它一共有多少位。
算法思路:在学代码的起始阶段,代码就是要朴实无华!我们知道java中整型做除法运算时往往会丢失精度,如:(int)5/6 = 0,后面的小数位会自动舍弃。由此为灵感,我们输入一个数,让它从最小的十位数开始除,如果结果为零就除以最小的9位数,还为零就除以最小的8位数,循环往复直到结果不为零为止,此时使结果不为零的除数的位数就和我们输入的位数相同。
代码:
import java.util.Scanner;
public class No_7_JudgeNum {
//任意输入一个整数(小于10位),输出它一共有多少位。
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//输入
System.out.println("请输入一个10位数以内的数字");
double randomNum = sc.nextDouble();
double billion = 1000000000;
int seat = 10;
while((int)(randomNum/billion) == 0){
billion /= 10;
seat--;
}
System.out.println(randomNum+"是"+seat+"位数");
}
}
4、计算 1+2-3+4-5+6-7....+100的结果//注意审题。
算法思路:此题较为简单,但是有些细节还是困住了大部分新手。我们可以发现,2,、4、6、8……全为正数,而且是偶数。3、5、7、9……前面带的都是负号,并且全是奇数。此时有一个例外情况1虽然是奇数,但它是正号。因此1 需要单独处理。
public class ArrayCompute {
//计算 1+2-3+4-5+6-7....+100的结果
public static void main(String[] args) {
int sum = 0;
for (int i = 1; i <= 100; i++) {
if(i%2 != 0 && i != 1){//判断i若为奇数,且不为1,则在计算过程中加上负号
sum -= i;
//System.out.println(i);//检验i判断是否合格
}else{//i为偶数,则加上正号
sum += i;
}
}
System.out.println("1+2-3+4-5+6-7....+100 = "+sum);//输出结果
}
}
5、从控制台输入一个正整数,计算该数的阶乘。例如输入5,阶乘为 5*4*3*2*1
算法思路: 这是代码练习中常见的阶乘计算方法。没有什么技巧,理清思路,再写代码。理清思路真的很重要,很多新手在没有正确的指导下喜欢边写代码边想,这样会严重影响对题目的思考,代码不重要,重要的是你的思路。因此,我建议先在纸上把大致方向路捋清楚再写代码会事半功倍哦!努力点,让大脑充满逻辑!————————————————————言归正传,阶乘嘛,我们将这个数递减至1的所有的数相乘。还是直接看代码吧!
import java.util.Scanner;
public class Multiplication {
//从控制台输入一个正整数,计算该数的阶乘。例如输入5,阶乘为 5*4*3*2*1
public static void main(String[] args) {
int mult = 1;
Scanner sc = new Scanner(System.in);
//请问你您想要计算那个数的阶乘
System.out.println("请问你您想要计算那个数的阶乘");
int num = sc.nextInt();
int i = num;
while(i != 1){
mult = mult*i;
i--;
}
System.out.println(num+"!是"+mult);
}
}
6、猴子吃桃问题: 猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个,第二天早上又将剩下的桃子吃了一半,又多吃一个,以后每天都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子。求第一天共摘了多少个?
算法思路:我觉得这道题应该是6道题目中最难的了,所以将它放在了最后。这道题,难得点不在于它的代码,而在于解决它的思路。脑子比技术更重要!这道题要从后往前推,我们要求的是第一天摘了多少个。那我们来思考一下第九天的情况,我们知道第十天早上剩下一个桃子 ,那么这一个就是第九天吃剩下来的。根据题目我们可以求得,第九天的早晨有四个桃子,吃了三个剩下一个。第九天早晨剩下的桃子是第八天晚上剩下的。
早晨 | 晚上 | |
第九天 | 4 | 1 |
第八天 | 10(可以算出) | 4 |
第七天 | 22 | 10 |
…… | …… | 22 |
以此类推,可以看到早晨的和前一天晚上剩的是一样的。可以有公式:
某天早晨的桃子数 = 2*晚上剩的桃子数+2;根据此公式可以有以下代码:
public class MonkeyEatPeach {
public static void main(String[] args) {
// 猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个,
// 第二天早上又将剩下的桃子吃了一半,又多吃一个,
// 以后每天都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子。
//设第一天猴子摘了x个桃子
int eatLeft = 1;
int left;
for (int i = 9; i >= 1; i--) {
left = 2*eatLeft+2;
eatLeft = left;
System.out.println("第"+i+"天早晨还剩"+left+"个桃子。");
}
}
}
这猴子是孙悟空吧,第一天吃了七千多个桃子,哈哈。