算法实验报告1

发布地址(方便阅读):

  1. https://cmd.dayi.ink/3VqGmm4dRamR85T2ptXCsQ
  2. https://blog.dayi.ink/?p=91

T1

N = eval(input())
nums = [i for i in range(1, N + 1)]
res = []
def fn(n, st, cur):
  if n < 0:
      return
  if n == 0:
      res.append(cur)
      return
  for i in range(st, len(nums)):
      fn(n - nums[i], i, cur + [nums[i]])
fn(N, 0, [])
print(res[1:len(res)-1])

T2

ls,k = eval(input())
st = sorted(ls)
print(st[k-1])

T3

ls = eval(input())

def calc(len_):
  res = []
  cmax = -0x3f3f3f3f
  for i in range(1,len(ls)):
    l = i-1
    r = l+len_
    if r>len(ls):
      break
    tmp_ls =ls[l:r]
    print(tmp_ls)
    tmp_sum = sum(tmp_ls)
    if tmp_sum>=cmax:
      res = tmp_ls
      cmax = tmp_sum
  return res

print(calc(2))

T4

有n名选手参加一个进行n-1天的比赛。每一名选手都需要和其他n-1名选手进行一场比赛,且每位选手每天只进行一场比赛。请为比赛安排日程。输入n,输出一个二维数组,令第i行、第j列的值代表第个选手在第j天的比赛。
#include<bits/stdc++.h>
int N;

struct node{
  int whoami;
};
int mp[1024][1024];

inline void debug_print(){
  for(int i=1;i<=16;++i){
    for(int j=1;j<=16;++j){
      std::cout<<mp[i][j]<<" ";
    }
    std::cout<<"\n";
  }std::cout<<"\n";
}
inline void solve(int sz){
  if(sz==2){
    mp[1][1]=1;
    mp[1][2]=2;
    mp[2][1]=2;
    mp[2][2]=1;
    return;
  } 
  solve(sz/2);
  //复制当前数据到右下角
  for(int i=1;i<=sz/2;++i){
    for(int j=1;j<=sz/2;++j){
      mp[i+sz/2][j+sz/2]=mp[i][j];
    }
  }
  //扩展左上角和左下角
  for(int i=1;i<=sz/2;++i){
    for(int j=1;j<=sz/2;++j){
      mp[i][j+sz/2]=mp[i][j]+sz/2;
      mp[i+sz/2][j]=mp[i][j]+sz/2;
    }
  }
} 

inline void print_res(int n){
  using namespace std;
  cout<<"   ";
  for(int i=1;i<=n-1;++i){
    cout<<"D"<<i<<"  ";
  }
  cout<<"\n";
  for(int i=1;i<=N;++i){
    for(int j=1;j<=n;++j){
      if(mp[i][j] > N) cout<<"R   "; // 只有当值大于N时才打印'R'
      else cout<<mp[i][j]<<"   ";
    }
    cout<<"\n";
  }
}

int main(){
  using namespace std;
  // N=8;
  std::cin>>N;
  int n = N;
  if((n & (n - 1))!=0){
    n = pow(2, ceil(log2(n)));
    // printf("xxx:%d",n);
  }
  solve(n);
  // debug_print();
  print_res(n);
}

输出结果:

=========2==========
   D1  
1   2   
2   1   
=====================

=========3==========
   D1  D2  D3  
1   2   3   R   
2   1   R   3   
3   R   1   2   
=====================

=========4==========
   D1  D2  D3  
1   2   3   4   
2   1   4   3   
3   4   1   2   
4   3   2   1   
=====================

=========5==========
   D1  D2  D3  D4  D5  D6  D7  
1   2   3   4   5   R   R   R   
2   1   4   3   R   5   R   R   
3   4   1   2   R   R   5   R   
4   3   2   1   R   R   R   5   
5   R   R   R   1   2   3   4   
=====================

=========6==========
   D1  D2  D3  D4  D5  D6  D7  
1   2   3   4   5   6   R   R   
2   1   4   3   6   5   R   R   
3   4   1   2   R   R   5   6   
4   3   2   1   R   R   6   5   
5   6   R   R   1   2   3   4   
6   5   R   R   2   1   4   3   
=====================

=========7==========
   D1  D2  D3  D4  D5  D6  D7  
1   2   3   4   5   6   7   R   
2   1   4   3   6   5   R   7   
3   4   1   2   7   R   5   6   
4   3   2   1   R   7   6   5   
5   6   7   R   1   2   3   4   
6   5   R   7   2   1   4   3   
7   R   5   6   3   4   1   2   
=====================

=========8==========
   D1  D2  D3  D4  D5  D6  D7  
1   2   3   4   5   6   7   8   
2   1   4   3   6   5   8   7   
3   4   1   2   7   8   5   6   
4   3   2   1   8   7   6   5   
5   6   7   8   1   2   3   4   
6   5   8   7   2   1   4   3   
7   8   5   6   3   4   1   2   
8   7   6   5   4   3   2   1   
=====================

=========9==========
   D1  D2  D3  D4  D5  D6  D7  D8  D9  D10  D11  D12  D13  D14  D15  
1   2   3   4   5   6   7   8   9   R   R   R   R   R   R   R   
2   1   4   3   6   5   8   7   R   9   R   R   R   R   R   R   
3   4   1   2   7   8   5   6   R   R   9   R   R   R   R   R   
4   3   2   1   8   7   6   5   R   R   R   9   R   R   R   R   
5   6   7   8   1   2   3   4   R   R   R   R   9   R   R   R   
6   5   8   7   2   1   4   3   R   R   R   R   R   9   R   R   
7   8   5   6   3   4   1   2   R   R   R   R   R   R   9   R   
8   7   6   5   4   3   2   1   R   R   R   R   R   R   R   9   
9   R   R   R   R   R   R   R   1   2   3   4   5   6   7   8   
=====================

=========10==========
   D1  D2  D3  D4  D5  D6  D7  D8  D9  D10  D11  D12  D13  D14  D15  
1   2   3   4   5   6   7   8   9   10   R   R   R   R   R   R   
2   1   4   3   6   5   8   7   10   9   R   R   R   R   R   R   
3   4   1   2   7   8   5   6   R   R   9   10   R   R   R   R   
4   3   2   1   8   7   6   5   R   R   10   9   R   R   R   R   
5   6   7   8   1   2   3   4   R   R   R   R   9   10   R   R   
6   5   8   7   2   1   4   3   R   R   R   R   10   9   R   R   
7   8   5   6   3   4   1   2   R   R   R   R   R   R   9   10   
8   7   6   5   4   3   2   1   R   R   R   R   R   R   10   9   
9   10   R   R   R   R   R   R   1   2   3   4   5   6   7   8   
10   9   R   R   R   R   R   R   2   1   4   3   6   5   8   7   
=====================

=========11==========
   D1  D2  D3  D4  D5  D6  D7  D8  D9  D10  D11  D12  D13  D14  D15  
1   2   3   4   5   6   7   8   9   10   11   R   R   R   R   R   
2   1   4   3   6   5   8   7   10   9   R   11   R   R   R   R   
3   4   1   2   7   8   5   6   11   R   9   10   R   R   R   R   
4   3   2   1   8   7   6   5   R   11   10   9   R   R   R   R   
5   6   7   8   1   2   3   4   R   R   R   R   9   10   11   R   
6   5   8   7   2   1   4   3   R   R   R   R   10   9   R   11   
7   8   5   6   3   4   1   2   R   R   R   R   11   R   9   10   
8   7   6   5   4   3   2   1   R   R   R   R   R   11   10   9   
9   10   11   R   R   R   R   R   1   2   3   4   5   6   7   8   
10   9   R   11   R   R   R   R   2   1   4   3   6   5   8   7   
11   R   9   10   R   R   R   R   3   4   1   2   7   8   5   6   
=====================

=========12==========
   D1  D2  D3  D4  D5  D6  D7  D8  D9  D10  D11  D12  D13  D14  D15  
1   2   3   4   5   6   7   8   9   10   11   12   R   R   R   R   
2   1   4   3   6   5   8   7   10   9   12   11   R   R   R   R   
3   4   1   2   7   8   5   6   11   12   9   10   R   R   R   R   
4   3   2   1   8   7   6   5   12   11   10   9   R   R   R   R   
5   6   7   8   1   2   3   4   R   R   R   R   9   10   11   12   
6   5   8   7   2   1   4   3   R   R   R   R   10   9   12   11   
7   8   5   6   3   4   1   2   R   R   R   R   11   12   9   10   
8   7   6   5   4   3   2   1   R   R   R   R   12   11   10   9   
9   10   11   12   R   R   R   R   1   2   3   4   5   6   7   8   
10   9   12   11   R   R   R   R   2   1   4   3   6   5   8   7   
11   12   9   10   R   R   R   R   3   4   1   2   7   8   5   6   
12   11   10   9   R   R   R   R   4   3   2   1   8   7   6   5   
=====================

=========13==========
   D1  D2  D3  D4  D5  D6  D7  D8  D9  D10  D11  D12  D13  D14  D15  
1   2   3   4   5   6   7   8   9   10   11   12   13   R   R   R   
2   1   4   3   6   5   8   7   10   9   12   11   R   13   R   R   
3   4   1   2   7   8   5   6   11   12   9   10   R   R   13   R   
4   3   2   1   8   7   6   5   12   11   10   9   R   R   R   13   
5   6   7   8   1   2   3   4   13   R   R   R   9   10   11   12   
6   5   8   7   2   1   4   3   R   13   R   R   10   9   12   11   
7   8   5   6   3   4   1   2   R   R   13   R   11   12   9   10   
8   7   6   5   4   3   2   1   R   R   R   13   12   11   10   9   
9   10   11   12   13   R   R   R   1   2   3   4   5   6   7   8   
10   9   12   11   R   13   R   R   2   1   4   3   6   5   8   7   
11   12   9   10   R   R   13   R   3   4   1   2   7   8   5   6   
12   11   10   9   R   R   R   13   4   3   2   1   8   7   6   5   
13   R   R   R   9   10   11   12   5   6   7   8   1   2   3   4   
=====================

=========14==========
   D1  D2  D3  D4  D5  D6  D7  D8  D9  D10  D11  D12  D13  D14  D15  
1   2   3   4   5   6   7   8   9   10   11   12   13   14   R   R   
2   1   4   3   6   5   8   7   10   9   12   11   14   13   R   R   
3   4   1   2   7   8   5   6   11   12   9   10   R   R   13   14   
4   3   2   1   8   7   6   5   12   11   10   9   R   R   14   13   
5   6   7   8   1   2   3   4   13   14   R   R   9   10   11   12   
6   5   8   7   2   1   4   3   14   13   R   R   10   9   12   11   
7   8   5   6   3   4   1   2   R   R   13   14   11   12   9   10   
8   7   6   5   4   3   2   1   R   R   14   13   12   11   10   9   
9   10   11   12   13   14   R   R   1   2   3   4   5   6   7   8   
10   9   12   11   14   13   R   R   2   1   4   3   6   5   8   7   
11   12   9   10   R   R   13   14   3   4   1   2   7   8   5   6   
12   11   10   9   R   R   14   13   4   3   2   1   8   7   6   5   
13   14   R   R   9   10   11   12   5   6   7   8   1   2   3   4   
14   13   R   R   10   9   12   11   6   5   8   7   2   1   4   3   
=====================

=========15==========
   D1  D2  D3  D4  D5  D6  D7  D8  D9  D10  D11  D12  D13  D14  D15  
1   2   3   4   5   6   7   8   9   10   11   12   13   14   15   R   
2   1   4   3   6   5   8   7   10   9   12   11   14   13   R   15   
3   4   1   2   7   8   5   6   11   12   9   10   15   R   13   14   
4   3   2   1   8   7   6   5   12   11   10   9   R   15   14   13   
5   6   7   8   1   2   3   4   13   14   15   R   9   10   11   12   
6   5   8   7   2   1   4   3   14   13   R   15   10   9   12   11   
7   8   5   6   3   4   1   2   15   R   13   14   11   12   9   10   
8   7   6   5   4   3   2   1   R   15   14   13   12   11   10   9   
9   10   11   12   13   14   15   R   1   2   3   4   5   6   7   8   
10   9   12   11   14   13   R   15   2   1   4   3   6   5   8   7   
11   12   9   10   15   R   13   14   3   4   1   2   7   8   5   6   
12   11   10   9   R   15   14   13   4   3   2   1   8   7   6   5   
13   14   15   R   9   10   11   12   5   6   7   8   1   2   3   4   
14   13   R   15   10   9   12   11   6   5   8   7   2   1   4   3   
15   R   13   14   11   12   9   10   7   8   5   6   3   4   1   2   
=====================

=========16==========
   D1  D2  D3  D4  D5  D6  D7  D8  D9  D10  D11  D12  D13  D14  D15  
1   2   3   4   5   6   7   8   9   10   11   12   13   14   15   16   
2   1   4   3   6   5   8   7   10   9   12   11   14   13   16   15   
3   4   1   2   7   8   5   6   11   12   9   10   15   16   13   14   
4   3   2   1   8   7   6   5   12   11   10   9   16   15   14   13   
5   6   7   8   1   2   3   4   13   14   15   16   9   10   11   12   
6   5   8   7   2   1   4   3   14   13   16   15   10   9   12   11   
7   8   5   6   3   4   1   2   15   16   13   14   11   12   9   10   
8   7   6   5   4   3   2   1   16   15   14   13   12   11   10   9   
9   10   11   12   13   14   15   16   1   2   3   4   5   6   7   8   
10   9   12   11   14   13   16   15   2   1   4   3   6   5   8   7   
11   12   9   10   15   16   13   14   3   4   1   2   7   8   5   6   
12   11   10   9   16   15   14   13   4   3   2   1   8   7   6   5   
13   14   15   16   9   10   11   12   5   6   7   8   1   2   3   4   
14   13   16   15   10   9   12   11   6   5   8   7   2   1   4   3   
15   16   13   14   11   12   9   10   7   8   5   6   3   4   1   2   
16   15   14   13   12   11   10   9   8   7   6   5   4   3   2   1   
=====================

直接照着抄为python

import math

N = None
mp = [[0 for _ in range(1024)] for _ in range(1024)]

def debug_print():
    for i in range(1, 17):
        for j in range(1, 17):
            print(f"{mp[i][j]:2d}", end=" ")
        print()
    print()

def solve(sz):
    if sz == 2:
        mp[1][1] = 1
        mp[1][2] = 2
        mp[2][1] = 2
        mp[2][2] = 1
        return

    solve(sz // 2)
    # 复制当前数据到右下角
    for i in range(1, sz // 2 + 1):
        for j in range(1, sz // 2 + 1):
            mp[i + sz // 2][j + sz // 2] = mp[i][j]
    # 扩展左上角和左下角
    for i in range(1, sz // 2 + 1):
        for j in range(1, sz // 2 + 1):
            mp[i][j + sz // 2] = mp[i][j] + sz // 2
            mp[i + sz // 2][j] = mp[i][j] + sz // 2

def print_res(n):
    print("   ", end="")
    for i in range(1, n):
        print(f"D{i}  ", end="")
    print()
    for i in range(1, N + 1):
        for j in range(1, n + 1):
            if mp[i][j] > N:
                print("R   ", end="")
            else:
                print(f"{mp[i][j]:<4}", end="")
        print()

def init():
    global N
    n = N
    if (n & (n - 1)) != 0:
        n = 2 ** math.ceil(math.log2(n))

    solve(n)
    # debug_print()
    print_res(n)

if __name__ == "__main__":
    for i in range(2, 17):
        N = i
        print(f"========={i}==========")
        init()
        print("=====================")

最后修改:2023 年 11 月 08 日
如果觉得我的文章对你有用,请随意赞赏