1、给定一个数字N,输入如下的二位数组,请问解决思路,是什么算法?
如下是需要输出的二位输出样例:
n=2
11
11
n=3
111
121
111
n=4
1111
1221
1221
1111
n=5
11111
12221
12321
12221
11111
n=6
111111
122221
123321
123321
122221
111111
n=......
求编程思路?
算法包括除以2求余,和除以2的商.里面的数值用到余数,商,和给定值N。求余用%,求商用/.只是思路的话,
x行y列,x,y比较,取小的一位.(x,y都小于n/2),
a=x-n/2行b=y-n/2列,取小的一位.(x,y都大于n/2)。
即把这个看成坐标。
如果只要求这样的输出效果的话, 可以用二维矩阵来处理, java 代码如下 :
public class Demo_1 {
public static void main(String[] args){
int n = 7;
int temp = n;
int a[][]=new int[n][n];
for(int i=0;i<=(n+1)/2;i++){
for(int j=i;j<temp;j++){
for(int k=i;k<temp;k++){
a[j][k]+=1;
}
}
temp-=1;
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
System.out.print(a[i][j]);
}
System.out.println();
}
}
}
这段代码算是完整了,首先分两种情况,是奇数还是偶数,偶数很简单,加入你输入了一个8,先把1234放入数组,在把4321放入数组,
如果是奇数,假如是7,就先把1234放入数组,然后在放入321,思路就这样,至于判断条件什么的就不用说了吧,希望对你有所帮助
package csdn;
import java.util.Scanner;
public class Math {
public static void main (String[] args){
Scanner scanner=new Scanner(System.in);
System.out.println("请输入一个大于0的整数");
while(true){
int num=scanner.nextInt();
if (num<=0) {
System.out.println("请重新输入一个大于0的整数");
continue;
}
int [] num1=getInt(num);
for(int i:num1){
System.out.print(i+" ");
}
break;
}
}
public static int[] getInt(int num){
int[] arr= new int[num];
if (arr.length%2==1) {
for(int i=0;i<arr.length;i++){
if (i<=num/2) {
arr[i]=i+1;
}else{
arr[i]=arr.length-i;
}
}
return arr;
}else {
for(int i=0;i<arr.length;i++){
if (i<arr.length/2) {
arr[i]=i+1;
}else {
arr[i]=arr.length-i;
}
}
}
return arr;
}
}
可以看做最外层有一个边框, 矩阵上的数表明到边框的最小距离
import java.util.Scanner;
/**
Created by yueguangxuanyuan on 2015/4/20.
*/
public class Hello {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int num = in.nextInt();
int[][] resultArray = new int[num + 1][num + 1];
int mid = (num + 1) / 2;
for (int i = 1; i <= mid; i++) {
for (int j = 1; j <= mid; j++) {
//确定最上角的最小距离 然后水平翻转 外加垂直翻转
resultArray[i][j] = resultArray[i][num+1 - j] = resultArray[num+1 - i][j] = resultArray[num+1 - i][num+1 - j] =(i > j ? j : i);
}
}
for(int i = 1; i <= num ;i++){
for(int j = 1; j <=num ; j++){
System.out.print(resultArray[i][j]);
}
System.out.print('\n');
}
}
}