Skip to main content
  1. Posts/

幻方....

·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 1106 Transmitters (计算几何,叉积||极角排序)

·2 mins
Transmitters **Time Limit:** 1000MS **Memory Limit:** 10000K **Total Submissions:** 4817 **Accepted:** 2576 Description In a wireless network with multiple transmitters sending on the same frequencies, it is often a requirement that signals don’t overlap, or at least that they don’t conflict. One way of accomplishing this is to restrict a transmitter’s coverage area. This problem uses a shielded transmitter that only broadcasts in a semicircle.