实现类似于如下功能: 1,1,2,3,5,8,13,21.......
方法一(采用数组):
方法二(采用临时变量):private void rubbit(int num){
int[] vec = new int[num];
vec[0] = 1;
vec[1] = 2;
for(int i = 2; i < num; i++){
vec[i] = vec[i - 1] + vec[i - 2];
}
System.out.println("res: =" + vec[num - 1]);
}
private static int rubbit(int num){
int res = 0;
int num1 = 1, num2 = 2;
if(num == 1 || num == 2){
res = 1;
}else{
for(int i = 3; i <= num; i++){
res = num1 + num2;
num1 = num2;
num2 = res;
}
}
return res;
}
方法三(采用递归实现):
题目:判断101-200之间有多少个素数,并输出所有素数。private static int rubbit(int num){
int res = 0;
if(num == 1 || num == 2){
res = 1;
}else{
res = rubbit(num - 1) + rubbit(num - 2);
}
return res;
}
程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,
则表明此数不是素数,反之是素数
private static void pro(int min, int max){
boolean flag;
for(int i = min; i < max; i++){
flag = true;
for(int j = 2; j < i; j++){
if(i % j == 0){
flag = false;
break;
}
}
if(flag){
System.out.println( i + "\n");
}
}
}
题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果n <> k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
//自己实现的O(∩_∩)O~
private static void show(int num){
String resStr = "";
int i;
for(i = 2; i <= num;){
if(num % i == 0){
num = num / i;
System.out.println("i: " + i);
resStr += (i + "*");
}else{
i++;
}
}
System.out.println(resStr.substring(0, resStr.length() - 1));
}
题目:一个数如果恰好等于它的因子之和,这个数就称为 "完数 "。例如6=1+2+3.编程 找出1000以内的所有完数。
private static void show(){
List<Integer> lists = null;
int i;
for(i = 1; i < 1000; i++){
lists = new ArrayList<Integer>();
for(int j = 1; j < i; j++){
if(i % j == 0){
lists.add(j);
}
}
//判断操作
int sum = 0;
for(int m = 0; m < lists.size(); m++){
sum += lists.get(m);
}
if(sum == i){
System.out.println(i);
}
}
}
自己实现的丢手帕问题
private void show(List<Integer> all){
int m = 0, n = 1;
while(all.size() != 1){
if(n % 4 == 0){
System.out.println("移除的对象:" + all.remove(m) + " ,当前集合的长度为:" + all.size());
n = 1;;
m -= 1; //因为从容器中删除了一个对象之后,联表的长度也会发生改变,所以这里需要减去1
}else{
++n;
}
if(m < all.size() - 1){
++m;
}else{
m = 0;
}
}
System.out.println("剩余的对象:" + all.get(0));
}
自己写的一个小示例,用于在给定的一些数值当中随机取7个,要求取到的每一个数值都不相同。
private static void mytest(){
int[] arrs = new int[]{1,2,3,4,5,6,7,8,9,10};
int[] haveValue = new int[7];
boolean flag = true;
Random rd = new Random();
int curIn = 0;
boolean curflag = false; //判断是否有相同的
for(int i = 0; i < haveValue.length; i++){
flag = true;
while(flag){
curIn = rd.nextInt(arrs.length - 1);
for(int j = 0; j <= i; j++){
if(haveValue[j] == arrs[curIn]){
curflag = true;
break;
}
}
if(!curflag){
haveValue[i] = arrs[curIn];
flag = false; //说明没有重复的数值
}
curflag = false;//进行下次循环时要置为初始状态
}
}
for(int i = 0; i < haveValue.length; i++){
System.out.println("随机到的数值:" + haveValue[i]);
}
}
//这段代码也是用于随机7个不同的数public static void main(String[] args) {
// TODO Auto-generated method stub
int[] a = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
int loc = 0;
for (int i = 0; i < 11; i ++){
loc = (int)(Math.random()*19);
System.out.println("loc: " + loc);
int temp = a[i];
a[i] = a[loc];
a[loc] = temp;
}
for (int i = 0; i < 7; i ++){
System.out.print(a[i] + " ");
}
}
要求每7个字一组,分别横向和纵向输出古诗
public static void main(String[] args){
char[][] arr = new char[4][7];
String s = "朝辞白帝彩云间千里江陵一日还两岸猿声啼不住轻舟已过万重山";
for(int i = 0; i < arr.length; i++){
for(int j = 0; j < arr[i].length; j++){
arr[i][j] = s.charAt(i * 7 + j);
}
}
//横向输出
for(int i = 0; i < arr.length; i++){
for(int j = 0; j < arr[i].length; j++){
System.out.print(arr[i][j]);
}
System.out.println();
}
//纵向输出 这个值得学习一下
for(int i = 0; i < arr[0].length; i++){
for(int j = 0; j < arr.length; j++){
System.out.print(arr[arr.length - j - 1][i] + " ");
}
System.out.println();
}
}
下面是不增和式算法的解析过程,效果如注释部分所示:
/**
* 不增和式算法
* 4 = 4
* 4 = 3 + 1
* 4 = 2 + 1 + 1
* 4 = 1 + 1 + 1 + 1
* @param num 要计算的数字
*/
private void buZengHeShi(int num){
String tempStr = null;
int sum = 0;
int j = 1;
for(int i = num; i >= 1; i--){
sum = i;
tempStr = i + "+";
while(sum < num){
sum = sum + j;
tempStr += (j + "+");
}
String printStr = tempStr.substring(0, tempStr.length() - 1); //将后面的进行截取
System.out.println(printStr);
sum = 0; //重新置0,以便进行下一轮的循环
tempStr = "";
}
}