几个面试题

多维数组

二维数组的声明

Int [][]a = { {1} , {1,2} , {1,2,3} };

或:

Int [][]a = new int [2][];

a[0] = {1,2,3};

a[1] = {4,5,6};

多维数组的迭代

int [][] b1 = new int [][]{{1,2},{3,4}};

for(int i =0; i<b1.length; i++){

 for(int j =0; j<b1[i].length; j++){

System.out.print(b1[i][j]);

}

}

数组拷贝的静态方法:

arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
         从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。

 

例题:

int[] a={10,100,1000}; //定义数组a

      int[] b={20,200,2000,20000}; //定义数组b

      System.arraycopy(a, 1, b, 2, 2); //从a的第2位(1+1)开始拷贝,步长2,到b的第3位(2+1),其余溢出

      for(int x:b){

          System.out.println(x); //输出结果为20  200  100  1000

     }

数组的优缺点:

优点:越界检查

缺点:长度一经定义,不能更改。

九九乘法表

public static void main(String[] args) {

 

int i; //i为行变量

int j; //j为列变量

int sum; //sum为和变量

for(i=1;i<=9;i++){

 

for(j=1;j<=9&&i>=j;j++) {

//不输出和的情况

//System.out.print(i+"*"+j+' ');

 

 

sum=i+j; //输出和的情况

System.out.print(i+"*"+j+"="+sum);

 

//利用空格对齐,sum大于10空两格,sum小于10空三格

if (sum<10) {

System.out.print("   ");

}

else {

System.out.print("  ");

}

}

 

//j循环结束换行

System.out.println("");

}

 

}

斐波那契数列

public static void main(String[]args) {

 

int month = 8; //随机输入月份数

int sum1 = 1; //初始化第一个月

int sum2 = 1; //初始化第二个月

int sum3 = sum1+sum2; //某个月的兔子总数

int i = 1; //计数器

 

//1月、2月的兔子总数

switch (month){

 

case 1: System.out.println(sum1); break;

case 2: System.out.println(sum2); break;

default: break;

 

}

//其他月份的兔子总数

for(i=1;i<=month;i++) {

 

if(i>2) {

sum3 = sum1 + sum2; //某个月的兔子总数=前两个月兔子数之和

sum1 = sum2; //将前两个月的兔子数初始化为新的值

sum2 = sum3;

 

if ( (i==month) && (month!=2) ) {

System.out.println(sum3); //输出某个月的兔子总数

}

}

}

}

 

 

 

1到100的素数及其个数

public static void main(String[] args) {

 

int j=2; //初始化假定因子(除数)

int i=1; //计数器,已包含素数2

int x = 3; //初始化3~100的某数(被除数)

 

 

System.out.println(2); //输出素数2

for (x=3;x<100;x++) { //从3到100递增,步长为1

 

for (j=2;j<x;j++) { //除数递增,步长为1,直到除数等于被除数时停止

 

if (x%j== 0) { //某数对假定因子取模,值一旦为0即跳出循环

 

break;

}

 

if (j==x-1) { //假定因子一直从2增长到x-1,一直未跳出循环,说明该数无真因子。

 

System.out.println(x); //输出该素数

i++; //输出计数器统计的数

}

}

}

System.out.println(i); //输出素数的个数

}

 

完数

public static void main(String[] args) {

 

int i = 1;     //某数的第一个因子,也当做因子之和

int j = 2; //初始化因子

int x = 2;    //初始化1~10000的某数

 

for (x=2;x<10000;x++) { //寻找完数

 

i=1;

for (j=2;j<x;j++) { //寻找因子

if (x%j==0) {

i+=j;

}

}

if (x==i) { //和相同时输出

System.out.println(x);

}

}

}

 

4*4数组旋转90度

 

public static void main(String[] args) {

 

int i=0,j=0; //利用i,j访问每个位置

int [][] a = {

{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}

}; //创建一个二维数组,行与列均占5个位置,(其中一个存放长度4)

 

for (i=0;i<a.length;i++) {

for (j=0;j<a[i].length;j++) {

System.out.print(a[i][j]+" ");

}

System.out.println("");

}

 

System.out.println("");

 

for (i=3;i<a.length;i--) {

for (j=0;j<a[i].length;j++) {

System.out.print(a[j][i]+" ");

}

System.out.println("");

}

}

 

杨辉三角

public static void main(String[] args) {

int i=0; //行变量

int j=0; //列变量

int [][]a = new int [8][8] ; //定义一个二维数组

a[0][0] = 1;

a[0][1] = 1;

a[1][1] = 1; //初始化前两行

System.out.println(a[0][0]);

for (i=2;i<=a.length;i++) { //第三行开始

 

for (j=1;j<=i;j++) {

 

a[i][j]=a[i-1][j-1]+a[i-1][j]; //某数等于上一行同列的数+上一行前一列的数

System.out.print(a[i][j]+" ");

}

System.out.println("");

}

 

}

 

pi的近似值

//pi/2 = 1+1/3+1/3*2/5 + 1/3*2/5*3/7 + 1/3*2/5*3/7*4/9+.....

public static void main(String[] args) {

double i=1.0;

double j=3;

double pi=1.0;

double a = 1.0/3;

 

for(i=2.0,j=5;i<=100;i++,j+=2) {

 

pi = pi + a;

a = a * ( i / j);

 

}

 

System.out.println(2*pi);

}

 

获得某年某月的最大天数

int i = 1992; //定义年

int j = 2; //定义月

 

switch (j){

 

case 1: System.out.println(i+"年"+j+"月有31天"); break;

case 2:

if ( ( (i%4==0) && (i%100!=0) ) || (i%400==0) ) { //判断是否为闰年

System.out.println(i+"年"+j+"月有29天");

}

else

System.out.println(i+"年"+j+"月有28天"); break;

case 3: System.out.println(i+"年"+j+"月有31天"); break;

case 4: System.out.println(i+"年"+j+"月有30天"); break;

case 5: System.out.println(i+"年"+j+"月有31天"); break;

case 6: System.out.println(i+"年"+j+"月有30天"); break;

case 7: System.out.println(i+"年"+j+"月有31天"); break;

case 8: System.out.println(i+"年"+j+"月有31天"); break;

case 9: System.out.println(i+"年"+j+"月有30天"); break;

case 10: System.out.println(i+"年"+j+"月有31天"); break;

case 11: System.out.println(i+"年"+j+"月有30天"); break;

case 12: System.out.println(i+"年"+j+"月有31天");

}

 {

}

}

 

输入某年某月某日,判断这一天是这一年的第几天?

public static void main(String[] args) {

int year=1992;

int month=2; //定义年月日

int day=28;

int x=1;

 

switch(month) {

case 1: x = day; break;

case 2: x = day+31; break;

case 3: //加入闰年因素

if ( ( (year%4==0) && (year%100!=0) ) || (year%400==0) ) {

x = day+60;

break;

}

else{

x = day+59;

break;

}

 

case 4:

if ( ( (year%4==0) && (year%100!=0) ) || (year%400==0) ) {

x = day+91;

break;

}

else{

x = day+90;

break;

}

case 5:

if ( ( (year%4==0) && (year%100!=0) ) || (year%400==0) ) {

x = day+121;

break;

}

else{

x = day+120;

break;

}

case 6:

if ( ( (year%4==0) && (year%100!=0) ) || (year%400==0) ) {

x = day+152;

break;

}

else{

x = day+151;

break;

}

case 7:

if ( ( (year%4==0) && (year%100!=0) ) || (year%400==0) ) {

x = day+182;

break;

}

else{

x = day+181;

break;

}

case 8:

if ( ( (year%4==0) && (year%100!=0) ) || (year%400==0) ) {

x = day+213;

break;

}

else{

x = day+212;

break;

}

case 9:

if ( ( (year%4==0) && (year%100!=0) ) || (year%400==0) ) {

x = day+244;

break;

}

else{

x = day+243;

break;

}

case 10:

if ( ( (year%4==0) && (year%100!=0) ) || (year%400==0) ) {

x = day+274;

break;

}

else{

x = day+273;

break;

}

case 11:

if ( ( (year%4==0) && (year%100!=0) ) || (year%400==0) ) {

x = day+305;

break;

}

else{

x = day+304;

break;

}

case 12:

if ( ( (year%4==0) && (year%100!=0) ) || (year%400==0) ) {

x = day+335;

break;

}

else{

x = day+334;

break;

}

}

System.out.println("这一天是"+year+"年的第"+x+"天");

}

}

 

 

求一个数的阶乘

public static void main(String[] args) {

 

int x; //计算x的阶乘

int y=1;

for (x=3;x>0;x--) {

y = y*x; //x*(x-1)*(x-2)*...*1

}

System.out.println(y);

}

将10进制的数转换为2进制输出

public static void main(String[] args) {

int x = 10;

int [] a = new int [8] ;

int i = 0;

 

for (i=0;i<a.length;i++) {

a[i] = x%2; //对二求模取余

x = x/2; //商值继续计算

}

 

for (i=7;i>=0;i--) {

System.out.print(a[i]);

}

}

 

猴子吃桃

public static void main(String[] args) {

 

int i; //i为天数

int sum=1;

 

for(i=1;i<=9;i++) { //共吃了9天

sum = 2*(sum + 1); //从后往前推断

}

System.out.println(sum);

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值