#include <stdio.h>//循環賽問題 n=2^k 個運動員要進行循環賽 (1)每個選手必須與其他n-1名選手各比賽一次
//(2)每個選手一天只能賽一次 (3)循環賽一共進行n-1天
//利用分治法解決這個問題 用遞歸的方法用一分為二的策略對選手進行分割 知道剩下2個選手時 只需讓這兩個選手比賽就可以了
#include <stdlib.h>
#define N 8
int a[N][N];
void Table(int k, int **a,int C)
{
int n = 1;
for (int i = 1; i <= k; i++)n *= 2;//記錄人數 並且記錄劃分
for (int i = 1; i <= n; i++)a[1][i] = i;//錄入第一行 按人的編號錄入的數據
int m = 1;
for (int s = 1; s <= k; s++)
{
n /= 2;
for (int t = 1; t <= n; t++)//三重循環進行賦值 4,2,1
for (int i = m + 1; i <= m + 1; i++)//2,3,5
for (int j = m + 1; j <= m + 1; j++)//2,3,5
{
a[i][j + (t - 1)*m*2] = a[i - m][j + (t - 1)*m * 2 - m];//按4格對角線賦值
a[i][j + (t - 1)*m * 2 - m] = a[i - m][(t - 1)*m * 2];
}
m *= 2;//m按2的倍數遞增
}
}
int main()
{
int k = 3;
Table(k, a);
}
void Table(int k, int **a,int C)
我猜的話,應該是在main函數裡要聲明一個數組或者指針
然後對它取地址作為第二個參數進入Table函數參與運算
結果由這個二級指針帶出來,所以沒有設返回值