为啥要学算法:程序=数据结构+算法。
数据结构是数据组织的一种方式,算法的话,举个很简单的例子:
有个题目:计算1到100之间所有数的和?
传统的最笨的方法就是逐个累加,即1+2=3,3+3=6,6+4=10,……,算到100就需要计算99次;
但是后来有人发现了规律:
1+100=2+99=3+98=……=50+51,那不就是100/2=50个101相加嘛,所以直接等于(1+100)*100/2,即首末相加除以2就可以。其实这就是算法。
下面给大家介绍几个经典的算法题:
公鸡:5元一只
母鸡:3元一只
小鸡:1元三只
问:100元买100只 有几种方案
首先我们先分析题目要求:
- 一共100块钱;
- 要买100只
所以我们可以得到:把公鸡设x,母鸡y,小鸡z
x+y+z = 100,5x+3y+(z/3)=100
鸡的数量和为100,金额和为100
上代码(Java语言版,其他语言版可以参考其他博主文章,但是思路写法都一样的)
public class test3 { public static void main(String[] args) { for(int x=0;x<=20;x++){ for(int y=0;y<=33;y++){ for(int z=0;z<=100;z++){ if(x+y+z==100){ if(x*5+y*3+(z/3)==100&&z%3==0){ System.out.println("公鸡:"+x+",母鸡:"+y+"小鸡:"+z); } } } } } } }
结果:
一对兔子,从出生后第三个月起,每个月生一对兔子,小兔子长到第三个月后又生一对兔子,问第20个月有几只兔子。
思路:一对兔子,第三个月才开始生,所以第一和第二个月都是只有一对,我们可以用数组来表示:
题目要求一共20个月,所以:
int []arr = new int[20]; //创建一个20长度的数组
第一个月 :arr[0] = 1;
第二个月: arr[1] = 1;
第三个月,因为生了一对,所以:arr[2] = 2;
第四个月:因为第三个月生的小兔子还没到三个月,所以不会生,所以只有刚开始的那一对会生一对小兔子,所以:arr[3] = 3;
第五个月:原本有三对,加上刚开始的兔子生一对,3月份的兔子到了第三月,也会生一对,所以:arr[4] = 5;
因此我们会发现一个规律:arr[i] = arr[i-1] + arr[i-2];
当前月兔子数量等于前一个月和前两个月的兔子的和
上代码:
public class test4 { public static void main(String[] args) { int []arr = new int[20]; arr[0] = 1; arr[1] = 1; for(int i=2;i 3:逢七过1-100内,数字包含7和是7的倍数就要说过,打印需要说“过”的数字:
思路:
- 1-100内,数字包含7:有7,17,27,37,47,57,67,70-79,87,97
- 是7的倍数:7,14,21,28,35,42,49,56,63,70,77,84,91,98
表达式:
- i%10==7 取十位判断是否为7
- i/10%10==7 取个位判断是否为7
- i%7==0 判断是否为7个倍数
上代码:
public class test5 { public static void main(String[] args) { for(int i=0;i<=100;i++){ if(i%10==7 || i/10%10==7 || i%7==0){ System.out.print(i+","); } } } } //结果: //0,7,14,17,21,27,28,35,37,42,47,49,56,57,63 //67,70,71,72,73,74,75,76,77,78,79,84,87,91,97,98欢迎分享,转载请注明来源:内存溢出
评论列表(0条)