版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/b509_ying/article/details/89042548
无论什么时候,面试官都看重程序员的算法基本功,这也是证明自己能力的最直接的方法,所以面试之前一定要多多温习算法,最近因为面试我简单总结了几个小算法,编译运行通过的,如果有什么错误,欢迎指正^V^
1.求n的阶乘
方法一:使用递归算法
/**
* 递归求阶乘
* @param n
* @return
*/
public int fac1(int n){
if(n<0){
return -1;//不合法
}else if(n==0){
return 1;//0的阶乘是1
}else{
return n*fac1(n-1);
}
}
方法二:
/**
* 不适用递归求阶乘
* @param n
* @return
*/
public int fac2(int n){
int res =1;
if(n<0){
return -1;
}
if(n==0){
return 1;
}
for(int i=1;i<=n;i++){
res = res*i;
}
return res;
}
2.实现从1到100的求和
//1到100求和
public int sum(){
int sum = 0;
for(int i=1;i<=100;i++){
sum +=i;
}
return sum;
}
3.输出9*9口诀
//输出9*9口诀
public void multiply(){
for(int i=1;i<=9;i++){
for(int j=1;j<=i;j++){
System.out.print(j+"*"+i+"="+(i*j)+" ");
if(j==i){
System.out.println();
}
}
}
}
结果如下:
4.约瑟夫环问题:使用有80个小朋友手拉手围成一圈,由第一个小朋友开始从1开始数,数到3的小朋友退出,再从后面的小朋友从1数起,数到3的再退出,以此游戏下去,问最后剩下哪个小朋友?
//约瑟夫环问题
public void findChild(){
//定义一个数组,长度80,代表80个小朋友
int[] childs = new int[80];
//给小朋友编号
for (int i=0;i<childs.length;i++) {
childs[i] = i+1;
}
//设置计数器,进行数数
int count = 0;
//记录退出小朋友人数
int number = 0;
//记录数组下标
int i = 0;
//当退出人数小于(总人数-1)时遍历小朋友数组,数到3的小朋友退出
while(number<childs.length-1){
for(i=0;i<=childs.length-1;i++){
if(childs[i] != 0){//判断小朋友编号是否为0
count++;
if(count==3){//数到3的小朋友编号变为0,
childs[i]=0;
number++;//退出人数+1
count=0;//计数器置0
}
}
}
i=0;//重新遍历数组
}
//遍历数组,找出编号不为0的小孩
for (int j=0;j<childs.length;j++) {
if(childs[j]!=0){
System.out.println("最后剩下孩子编号为"+childs[j]);
}
}
}
结果如下:
5.有1、2、3、4这4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
public class TestPro1 {
public static void main(String[] args){
int[] a = {1,2,3,4};
int b = 0 ;
for(int i = 0 ; i<4 ; i++){
for(int j = 0 ; j<4 ; j++){
for(int k = 0 ;k<4 ; k++){
if(i == j || i == k || j == k){
}else{
System.out.print(a[i]*100+a[j]*10+a[k]);
b++;
System.out.println();
}
}
}
}
System.out.print(b);
}
}
6.打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。
public class FlowerTest {
public static void main(String[] args){
int a=0;
int b=0;
int c=0;
for(int i=100;i<=999;i++){
a=i/100;
b=i%100/10;
c=i%10;
if(i==a*a*a+b*b*b+c*c*c){
System.out.println(i);
}
}
}
}
7.将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
public static void main(String[] args){
int num=32;
int k = 2;
System.out.print(num + "=");
while (num > k) {
if (num % k == 0) {
System.out.print(k + "*");
num = num / k;
} else {
k++;
}
}
System.out.println(k);
}