↓ 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

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.