循环数组java实现

import java.lang.*;


public class xunhuanshuzu{
public static void main(String args[]){
int n = 7; //二维数组的维数
makeCril(n);
}
//输入n*n二维数组的维数n,得到循环数组
public static void makeCril(int n){
if(n > 0){ //判断维数是否大于0,小于0不予计算
int a[][] = new int[n][n]; //创建一个int型数组
for(int s = 0; s < n; s++){ //维数组赋初值0,用于下面的判断
for(int m = 0; m < n; m++){
a[s][m] = 0;
}
}
int i = 0; //当前判断元素的横坐标
int j = 0; //当前判断元素的纵坐标
int t = 1; //标记要填的数字1~n*n
int m1 = 0; //m1,m2标记最大元素n*n的位置
int m2 = 0;
if(n % 2 == 0){ //维数为偶数时最大数位置计算
m1 = n / 2;
m2 = m1 - 1;
}else{ //维数为奇数数时最大数位置计算
m1 = n / 2;
m2 = m1;
}
a[m1][m2] = n * n; //把最大数放在计算好的位置上
//最大数的位置为循环数组最后的位置,判断当没有达到最后的位置的时候
while(i != m1 || j != m2){
//向左填数
while(j < n && a[i][j] == 0){ //当向右填数时,只有j下标变大,范围最大为0~n,且当前a[i][j]没有填数,即a[i][j]=0
a[i][j] = t++; //填数
j++; //向右移一位
}
j--; //最后一定是多移了一位,要要移回来
if(i < n - 1){ //向右完成之后便是向下,所以i<n-1时,i向下移动一位
i++;
}
//向下填数
while(i < n && a[i][j] == 0){ //当向下填数时,只有i下标变大,范围最大为0~n,且当前a[i][j]没有填数,即a[i][j]=0
a[i][j] = t++; //填数
i++; //向下移一位
}
if(i == m1 && j == m2){ //判断是否到了最大数的位置,是的话跳出循环,推断得出,
break; //不会再向右填数的时候到达最大数的位置,故向左填数时,不必判断(有待检验)
}
i--; //最后一定是多移了一位,要要移回来
if(j > 0){ //向下完成之后便是向右,所以i>0时,i向左移动一位
j--;
}
//向右填数
while(j >= 0 && a[i][j] == 0){
a[i][j] = t++;
j--;
}
if(i == m1 && j == m2){
break;
}
j++;
if(i > 0){
i--;
}
//向上填数
while(i > 0 && a[i][j] == 0){
a[i][j] = t++;
i--;
}
if(i == m1 && j == m2){
break;
}
i++;
if(j < n - 1){
j++;
}
}
//输出填好的数组
for(int s = 0; s < n; s++){
for(int m = 0; m < n; m++){
System.out.print(formatStr(a[s][m]+""));
}
System.out.println();
}
}
}
//令数组元素的长度一致
public static String formatStr(String str){
if(str.length() < 6){
for(int i = 0; i < 6-str.length(); i++){
str = str + " ";
}
}
return str;
}

}


当输入7时的运行结果:



输入4时的运行结果:



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
最小循环数组是指在一个循环数组中,找到一个连续子数组,使该子数组的和最小。对于解决这个问题,可以使用Java编程语言来实现。 首先,我们需要定义一个函数来计算数组的和。该函数的输入参数为一个整数数组,返回值为数组的总和。下面是该函数的Java代码实现: ```java public int getSum(int[] nums) { int sum = 0; for (int num : nums) { sum += num; } return sum; } ``` 接下来,我们可以编写一个函数来找到最小循环数组的和。该函数的输入参数为一个整数数组,返回值为最小循环数组的和。下面是该函数的Java代码实现: ```java public int findMinSubarraySum(int[] nums) { int sum = getSum(nums); int currentSum = 0; int minSum = sum; for (int i = 0; i < nums.length; i++) { currentSum += nums[i]; if (currentSum > sum) { currentSum = nums[i]; } minSum = Math.min(minSum, currentSum); } return minSum; } ``` 在这段代码中,我们使用了一个变量currentSum来记录当前子数组的和,另一个变量minSum来记录最小循环数组的和。在遍历数组过程中,如果当前子数组的和大于整个数组的总和,就将currentSum重置为当前元素的值。每次更新minSum时,都使用Math.min函数来比较两个和的大小,并将较小的值赋给minSum。 最后,我们可以调用findMinSubarraySum函数来找到最小循环数组的和。下面是一个例子: ```java int[] nums = {4, 3, -2, -1, -3, 4, 5}; int minSubarraySum = findMinSubarraySum(nums); System.out.println("最小循环数组的和为:" + minSubarraySum); ``` 以上就是最小循环数组问题的Java解法,通过以上的代码实现,可以计算出最小循环数组的和。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值