↓ Skip to main content
  1. Posts/

幻方....

·500 words·1 min
Note: This article is available in Chinese only. 本文暂无英文版本。 View original

c语言上机。。。。

c写的幻方。

代码实现
  1/*************************************************************************
  2> File Name: code/class/7.c
  3> Author: 111qqz
  4> Email: rkz2013@126.com
  5> Created Time: 2015年11月11日 星期三 19时31分50秒
  6************************************************************************/
  7
  8#include<stdio.h>
  9#include <string.h>
 10
 11int n;
 12int a[105][105];
 13 13
 14
 15void swap(int *a,int *b)
 16{
 17int tmp;
 18tmp = *a;
 19*a = *b;
 20*b = tmp;
 21}
 22int fix_x( int x,int k,int n)
 23{
 24if (k%2==1)
 25{
 26if (x==0)
 27return n;
 28else return x;
 29}
 30else
 31{
 32if (x==n)
 33return n+n;
 34else return x;
 35}
 36}
 37int fix_y ( int y,int k,int n)
 38{
 39if (k<3)
 40{
 41if (y==n+1)
 42return 1;
 43else return y;
 44}
 45else
 46{
 47if (y==2*n+1)
 48return n+1;
 49else return y;
 50}
 51//   if (y==n+1)
 52//   return 1;
 53//  else return y;
 54}
 55void print()
 56{
 57for ( int i = 1 ; i <= n ; i++)
 58{
 59for ( int j = 1 ; j <= n ; j++)
 60printf("%d  ",a[i][j]);
 61 61
 62printf("n");
 63}
 64 64
 65}
 66 66
 67void OddMagic(int n,int x,int y,int k) //k表示4中状态。。。。
 68{
 69 69
 70int cur ;
 71if (k==1) cur = 1;
 72if (k==4) cur = n*n+1;
 73if (k==3) cur = n*n*2+1;
 74if (k==2) cur = n*n*3+1;
 75int cnt = 1;
 76while (cnt<=n*n)
 77{
 78a[x][y]=cur;
 79int prex = x;
 80int prey = y;
 81cur++;
 82cnt++;
 83x--;
 84y++;
 85x = fix_x(x,k,n);
 86y = fix_y(y,k,n);
 87if (a[x][y])
 88{
 89x = prex+1;
 90y = prey;
 91}
 92 92
 93}
 94 94
 95}
 96int main()
 97{
 98memset(a,sizeof(a),0);
 99scanf("%d",&n);
100if (n%2==1)
101{
102int x = 1;
103int y = n/2+1;
104OddMagic(n,x,y,1);
105}
106else
107{
108if (n%4==0)
109{
110for ( int i = 1,num=1 ; i <= n ; i++)
111for ( int j  = 1 ; j <= n  ; j++,num++)
112a[i][j]=num;
113
114
115for ( int i = 1 ; i <= n ; i++)
116{
117for ( int j = 1 ; j <= n ; j++)
118{
119if (i==j||i+j>=n+1) continue;
120int tmp;
121tmp = a[i][j];
122a[i][j] = a[n+1-i][n+1-j];
123a[n+1-i][n+1-j] = tmp;
124}
125}
126}
127else
128{
129int x = 1;
130int y = n/4+1;
131int hn = n/2;
132
133OddMagic(hn,x,y,1);
134OddMagic(hn,x+hn,y,2);
135OddMagic(hn,x,y+hn,3);
136OddMagic(hn,x+hn,y+hn,4);
137
138int  m = n/4;
139for ( int i = 1 ; i <= hn ;i++)
140{
141for ( int j = 1 ; j <= m ; j++)
142{
143int tmp;
144if (i==m+1&&j==m)
145{
146tmp = a[m+1][m+1];
147a[m+1][m+1] = a[m+1+hn][m+1];
148a[m+1+hn][m+1] = tmp;
149continue;
150
151}
152tmp = a[i][j];
153a[i][j] = a[i+hn][j];
154a[i+hn][j] = tmp;
155//  swap(a[i][j],a[i+n][j]);
156}
157}
158
159for ( int i = 1 ; i <= hn ; i++)
160{
161for ( int j = n ; j>=n-m+2 ; j--)
162{
163int tmp;
164tmp = a[i][j];
165a[i][j] = a[i+hn][j];
166a[i+hn][j] = tmp;
167}
168}
169
170
171
172
173}
174}
175print();
176
177}

Related

poj 1305 (毕达哥拉斯三元组,构造勾股数)

·1017 words·3 mins
题意是说,能构造多少本元勾股数和勾股数,要求构造的数<=n 所谓本元勾股数,就是三个勾股数没有公因数,两两互质。 由本元勾股数扩大k倍,就可以得到其他勾股数。 而构造本元勾股数的方法如下:

codeforces 534 A. Exam

·545 words·2 mins
A. Exam time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output An exam for n students will take place in a long and narrow room, so the students will sit in a line in some order. The teacher suspects that students with adjacent numbers (i and i + 1) always studied side by side and became friends and if they take an exam sitting next to each other, they will help each other for sure.

codeforces 482 A. Diverse Permutation(构造)

·385 words·1 min
C - C **Time Limit:**1000MS **Memory Limit:**262144KB 64bit IO Format:%I64d & %I64u Submit Status Description Permutation_p_ is an ordered set of integers _p_1, p_2, …, p__n, consisting of n distinct positive integers not larger than n. We’ll denote as_n the length of permutation _p_1, _p_2, …, p__n. Your task is to find such permutation p of length n, that the group of numbers |_p_1 - _p_2|, |_p_2 - _p_3|, …, |p__n - 1 - p__n| has exactly k distinct elements. Input The single line of the input contains two space-separated positive integers n, k (1 ≤ k < n ≤ 105).