sgu106-109写的时间也有点长了,懒得讲了 = = 就粗略用别人的博客吧
sgu106是关于不定方程,用了扩展欧几里德,下面的博客写的非常好
http://blog.csdn.net/volzkzg/article/details/7427233
sgu107就是一个发现规律的问题 = =
sgu108 http://blog.csdn.net/winoros/article/details/24053265
如果用bit数组那4M大小是完全够的,滚动数组更有技巧
sgu109
我的方法是这样的(不论奇数偶数)
比如5*5,原来是这样的
1 | 2 | 3 | 4 | 5 |
6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 |
先走n(5)步,变成下面这样,空的表示删除
1 | 2 | 3 | 4 | 5 |
6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | |
16 | 17 | 18 | ||
21 | 22 |
当N = 100刚好用完101-300的全部奇数
accept code:
/** 1 < N < 101* N <= K < 300* Ki != Kj*/#include <iostream>
using namespace std;int main()
{int N,K;cin >> N;K = N;cout << K << " ";for(int i = 0; i < N;i++)for(int j = 0; j < N;j++)if(i+j > N)cout << i*N+j+1 << " ";N%2 == 0?K++:K+=2;cout << endl << K << " ";K += 2;for(int i = 1 ; i < N; i++){int j = N - i;cout << i*N+j+1 << " ";}for(int E = (N-1); E > 0; E--,K+=2){cout << endl << K << " ";for(int i = 0 ; i <= E; i++){int j = E - i;cout << i*N+j+1 << " ";}}return 0;
}