Java面试题:n=2\n1*2*5*6\n--3*4\n\nn=3\n1*2*3*10*11*12\n--4*5*8*9\n----6*7\n如何实现如上结构的数据
今天学长在面试的时候遇到了一道题,然后让大家做一做。
在不看下面的答案之前,悠闲的朋友们一起来抖动一下大脑吧!

以下是我的想法:
import java.util.Scanner;
public class Case02 {
private static Scanner sc = new Scanner(System.in);
public static void main(String[] args) {
System.out.println("n=2\n1*2*5*6\n--3*4\n\nn=3\n1*2*3*10*11*12\n--4*5*8*9\n----6*7\n");
System.out.println("想查看其他数字如上的结构吗?请输入一个数字n:");
int n = sc.nextInt();
int a[] =new int[n*2];
int[] c = null;
for (int i = 1; i < n; i++) {
int x = 0;
//只走一次的for循环
if( i == 1 ){
for (int j = 1; j <= n*(n+1) && i == 1; j++) {
if( j == n*(n+1) ){
System.out.print( j );
a[x] = j;
x++;
}else if( j <= n || j > n*n ){
System.out.print( j + "*");
a[x] = j;
x++;
}
}
System.out.println();
System.out.print("--");
//第一次进入方法是使用的是a数组
c = getNextArray(a, i ,n );
}else{//其他都是c数组
c = getNextArray(c, i ,n );
//用来填充的横岗"--"
String nvl = "";
for (int j = 0; j < i; j++) {
nvl += "--";
}
System.out.print( nvl );
}
//输出
for (int j = 0; j < c.length; j++) {
if( j == c.length-1 ){//排除最后一个*
System.out.print(c[j]);
}else{
System.out.print(c[j]+"*");
}
}
System.out.println();
}
}
/**
* 根据当前行数据来获取下一行数据的值
* @param a 上一个数组
* @param count 第几行
* @param n 用户输入的数字
* @return
*/
private static int[] getNextArray( int[] a ,int count , int n){
int[] b = new int[(a.length/2-1)*2];
int x = 0;
for (int i = 0; i < a.length; i++) {
if( b.length != x ){
//把正中间的两个数删除
if( i < a.length/2-1 ){
b[x] = a[i]+(n-count+1);
x++;
}else if(i > a.length/2){
b[x] = a[i]-(n-count+1);
x++;
}
}
}
return b;
}
}
结果是对的,但是我是根据自己的想法一步一步写下了的。并没有什么技巧,就像我从小就喜欢数学,但是我只喜欢做难题一样,只做自己喜欢的事情。
以下是参考答案:
import java.util.Scanner;
public class Case {
@SuppressWarnings("resource")
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个数字:");
int n = sc.nextInt();
int c = 0;
int max = n*(n+1);
int r = 0;
for (int i = n; i >= 1; i--) {
for (int j = 0; j < n-i; j++) {
System.out.print("--");
}
for (int k = 0; k < i; k++) {
c++;
System.out.print(c+"*");
}
max = max - i;
r = max;
for (int k = 0; k < i; k++) {
r++;
if(k!=0){
System.out.print("*");
}
System.out.print(r);
}
System.out.println();
}
}
}
世界上聪明的人很多,老实的人很多,努力的人很多。也许你现在这些都做到了,但坚持下来的很少。
所以,不该骄傲,不该浮躁。不该在看到别人不学习时就放弃了自己。
Java面试题:n=2\n1*2*5*6\n--3*4\n\nn=3\n1*2*3*10*11*12\n--4*5*8*9\n----6*7\n如何实现如上结构的数据的更多相关文章
- java面试题(转)
1.面向对象的特征有哪些方面?答:面向对象的特征主要有以下几个方面:- 抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面.抽象只关注对象有哪些属性和行为,并不关注这些 ...
- 收集了50道基础的java面试题
下面的内容是对网上原有的Java面试题集及答案进行了全面修订之后给出的负责任的题目和答案,原来的题目中有很多重复题目和无价值的题目,还有不少的参考答案也是错误的,修改后的Java面试题集参照了JDK最 ...
- 转:Java面试题集(1-50)
Java程序员面试题集(1-50) http://blog.csdn.net/jackfrued/article/details/17403101 一.Java基础部分 1.面向对象的特征有哪些方面? ...
- Java面试题全集(上)转载
Java面试题全集(上) 2013年年底的时候,我看到了网上流传的一个叫做<Java面试题大全>的东西,认真的阅读了以后发现里面的很多题目是重复且没有价值的题目,还有不少的参考答案也是 ...
- 史上最全Java面试题整理(附参考答案)
下列面试题都是在网上收集的,本人抱着学习的态度找了下参考答案,有不足的地方还请指正,更多精彩内容可以关注我的微信公众号:Java团长 1.面向对象的特征有哪些方面? 抽象:将同类对象的共同特征提取出来 ...
- 经典Java面试题收集
1.面向对象的特征有哪些方面? 答:面向对象的特征主要有以下几个方面: 抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面.抽象只关注对象有哪些属性和行为,并不关注这些 ...
- 近5年常考Java面试题及答案整理(一)
下列面试题都是在网上收集的,本人抱着学习的态度找了下参考答案,有不足的地方还请指正. 1.面向对象的特征有哪些方面? 抽象:将同类对象的共同特征提取出来构造类. 继承:基于基类创建新类. 封装:将数据 ...
- 最有价值的50道java面试题 适用于准入职Java程序员
下面的内容是对网上原有的Java面试题集及答案进行了全面修订之后给出的负责任的题目和答案,原来的题目中有很多重复题目和无价值的题目,还有不少的参考答案也是错误的,修改后的Java面试题集参照了JDK最 ...
- Java面试题全集(上)
2013年年底的时候,我看到了网上流传的一个叫做<Java面试题大全>的东西,认真的阅读了以后发现里面的很多题目是重复且没有价值的题目,还有不少的参考答案也是错误的,于是我花了半个月时间对 ...
随机推荐
- 【数学/扩展欧几里得/线性求逆元】[Sdoi2008]沙拉公主的困惑
Description 大富翁国因为通货膨胀,以及假钞泛滥,政府决定推出一项新的政策:现有钞票编号范围为1到N的阶乘,但是,政府只发行编号与M!互质的钞票.房地产第一大户沙拉公主决定预测一下大富翁国现 ...
- [转载]jquery tmpl使用方法
动态请求数据来更新页面是现在非常常用的方法,比如博客评论的分页动态加载,微博的滚动加载和定时请求加载等. 这些情况下,动态请求返回的数据一般不是已拼好的 HTML 就是 JSON 或 XML,总之不在 ...
- 手工、工具分别实现cookie注入
最开始的判断access类型的网站注入点可以用“1 and 1=1”来判断. 不过现在的网站基本上被挡住了.之后呢,可以考虑cookie注入. Dim Tc_Post,Tc_Get,Tc_In,Tc_ ...
- 安装ADT Cannot complete the install because one or more required items could not be found.
点击进行安装,将会弹出 错误提示是: Cannot complete the install because one or more required items could not be found ...
- Android GridView、ListView、ScrollView上下拉刷新
实现方法是将显示的内容最外层的ViewGroup做成一个LinearLayout,并扩展它,使其可以上下拖动. 重点是实现View的onTouch方法. 下载:http://files.cnblogs ...
- jquery layout学习
1.官网:http://layout.jquery-dev.com/index.cfm 2.博客园:http://www.cnblogs.com/chen-fan/articles/2044556.h ...
- C#基础精华04(文件流,文件操作,File、Directory、Path,Directory)
文件流 FileStream 可读可写 大文件 释放 StreamReader 读取 释放 StreamWriter 写入 释放 using 中释放 File 可读可写 小文件 操作文 ...
- Octave下载
发福利啦,今天下了半天Octave都没下载下来,最后让一个香港的同学帮忙下好传过来的....放到网盘里造福大家 GNU_Octave_3.8.0-6.dmg 链接: http://pan.baidu. ...
- C#.Net 如何动态加载与卸载程序集(.dll或者.exe)2----通过应用程序域AppDomain加载和卸载程序集之后,如何再返回原来的主程序域
实现目的:动态加载dll,执行完毕之后可以随时卸载掉,并可以替换这些dll,以在运行中更新dll中的类. 其实就是通过应用程序域AppDomain加载和卸载程序集. 在这方面微软有篇文章http:// ...
- Eclipse优化
未特别说明,以下均处理在Window->Preferences下 General列表下 Startup and Shutdown可以去掉一些不必要的启动项 怎样才能知道哪些启动项有用呢?我现在把 ...