小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
七、题目
加法变乘法
我们都知道:1+2+3+ … + 49 = 1225现在要求你把其中两个不相邻的加号变成乘号,使得结果为2015
比如:1+2+3+…+1011+12+…+2728+29+…+49= 2015就是符合要求的答案。
请你寻找另外一个可能的答案,并把位置靠前的那个乘号左边的数字提交(对于示例,就是提交10)。
注意:需要你提交的是一个整数,不要填写任何多余的内容。
参考代码
public class Question7{
public static void main(String[]args) throws Exception {
//用穷举法来试探1225+a*b+e*f-a-b-e-f==2015 (b=a+1,f=e+1)
for(inti=1; i<50; i++){
for(intj=1;j<50;j++){
if((1225+i*(i+1)+j*(j+1)-i-j-(i+1)-(j+1))==2015)
System.out.println(i+"*****"+j);
}
}
}
}
}
八、题目
移动距离
X星球居民小区的楼房全是一样的,并且按矩阵样式排列。其楼房的编号为1,2,3…
当排满一行时,从下一行相邻的楼往反方向排号。
比如:当小区排号宽度为6时,开始情形如下:
1 2 3 4 5 6
12 11 109 8 7
13 14 1516 17 18....
我们的问题是:已知了两个楼号m和n,需要求出它们之间的最短移动距离(不能斜线方向移动)
输入为3个整数wm n,空格分开,都在1到10000范围内
要求输出一个整数,表示mn两楼间最短移动距离。
参考答案:
public class Question8{
public static voidm ain(String[]args) {
Scanner sc = newScanner(System.in);
System.out.println("inputw:");
int w = sc.nextInt();
System.out.println("inputn:");
int n = sc.nextInt();
System.out.println("inputm");
int m = sc.nextInt();
int[][] a=newint[w][w];
for(int i=0; i<a.length; i++)
if(i==0){//第一行
for(int j=0;j<w;j++)
a[i][j]=j+1;
}
}
elseif(i%2!=0){//奇数行
int t=w*i+1;
for(int j=w-1;j>=0;j--){
a[i][j]=t++;
}
}else{//偶数行(除过0)
int t=w*i+1;
for(int j=0;j<w;j++)
a[i][j]=t++;
}
}
}
//打印
for(int i=0; i<w; i++) {
for(int j=0;j<w; j++) {
System.out.print(a[i][j]+"\t");
}
System.out.println();
}
//求最短路径
intx1=0,x2=0,y1=0,y2=0;
for(int i=0; i<w; i++) {
for(int j=0;j<w; j++) {
if(a[i][j]==n){
x1=i;
y1=j;
}
if(a[i][j]==m){
x2=i;
y2=j;
}
}
}
int distance = Math.abs((x2-x1)+(y2-y1));
System.out.println(distance);
}
}
九、题目
打印大X
小明希望用星号拼凑,打印出一个大X,他要求能够控制笔画的宽度和整个字的高度。
为了便于比对空格,所有的空白位置都以句点符来代替。
要求输入两个整数mn,表示笔的宽度,X的高度。用空格分开(0保证n是奇数)
要求输出一个大X
例如,用户输入:
3 9
程序应该输出:
再例如,用户输入:
4 21
程序应该输出
参考答案
public class Question9{
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner ci=new Scanner(System.in);
int m=ci.nextInt(),n=ci.nextInt();
int b=n/2*2+m;
char [][] a=new char[n][b];
for (int i = 0; i < n; i++) {
for (int j = 0; j < b; j++) {
a[i][j]='.';
}
}
int x=0,y=0;
for(int i=0;i<n;i++) {
for(int j=0;j<b;j++) {
if(j-i<m&&j-i>=0) {
a[i][j]='*';
}
if(b-j-i<=m&&b-j-i>0) {
a[i][j]='*';
}
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < b; j++) {
System.out.print(a[i][j]);
}
System.out.println();
}
}
}