题目

解决代码及点评


/************************************************************************/
/* 二)程序设计
⑴奇阶纵横图n=2m+1请见填写方法分析1)。 该程序在 数组23题已经完成
⑵偶阶纵横图n=2(2m+1)时,算法分析是把方阵划成A、B、C、D四个小子阵,
然后进行多次交换数字来完成,较麻烦,但可从中发现巧妙的规律,A、B、C、D子阵中各元素,
都可以由 A子阵中相对位置上的元素加上一个常数得到,如B~(u/2)2,C~2(u/2)2D~3(u/2)2,
只要按奇阶纵横图先填A子阵,而B、C、D子阵便可由A子阵演变而成。
⑶偶阶纵横图n=4m时,先用循环判断方阵中每一位置是否在对角线上,如在对角线上,则将该位置赋值为1,
否则,赋值为0。然后将X←0,Y←N*N+1,X、Y为行列值。
然后用二重循环(I,J)从1依次变化至n。若A[I][J]=1,则A[I][J]←Y,若A[I][J]=0, 则A[I][J]←X,循环结束即得n=4m的方阵。
*/
/************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void MF494(int arr[][8])
{
int num=8;
int num1=num/4; int numB=num*num+1;
for (int i=0;i<num;i++)
{
for (int j=0;j<num;j++)
{
if ((i+j)%4==3||abs(i-j)%4==0)
{
arr[i][j]=numB-i*num-j-1;
}
else
arr[i][j]=i*num+j+1;
printf("%3d",arr[i][j]);
}
printf("\n");
}
}
//const int N=8; void MF5()
{ int k=2;
int arr10[10][10]={0};
#pragma region W
{int a[5][5] = {0};
int num = 1; int i = 0;
int j = 5/2; int ci = 0;
int cj = 0; while (1){
a[i][j] = num++; //将num当前数存入a[i][j];
ci = i; //保存i当前值;
cj = j; //保存j当前值; if (ci == 0)i = 5 - 1; //判断上一个是否在第0行
else i--;
if (cj == 5 - 1){ //判断上一个是否在第N-1列
j = 0;
i = ci-1;
}
else j++;
if (a[i][j] != 0 || (ci == 0 && cj == 5 - 1)){ //判断下一个位置是否被占有,或上一个是否在第0行,第N-1列
i = ci+1;
j = cj;
} int flag = 0;
for (int u = 0; u < 5; u++){ //判断矩阵是否已满
int flag1 = 0;
for (int v = 0; v < 5; v++){
if (a[u][v] == 0){
flag1 = 1;
break;
}
}
if (flag1 == 1){
flag = 1;
break;
}
}
if (flag == 0)break; //flag=0说明矩阵已经填满,跳出循环
}
for (int i=0;i<5;i++)
{
for(int j=0;j<5;j++)
{
arr10[i][j]=a[i][j];
}
}
}
#pragma endregion W
#pragma region W {int a[5][5] = {0};
int num = 26; int i = 0;
int j = 5/2; int ci = 0;
int cj = 0; while (1){
a[i][j] = num++; //将num当前数存入a[i][j];
ci = i; //保存i当前值;
cj = j; //保存j当前值; if (ci == 0)i = 5 - 1; //判断上一个是否在第0行
else i--;
if (cj == 5 - 1){ //判断上一个是否在第N-1列
j = 0;
i = ci-1;
}
else j++;
if (a[i][j] != 0 || (ci == 0 && cj == 5 - 1)){ //判断下一个位置是否被占有,或上一个是否在第0行,第N-1列
i = ci+1;
j = cj;
} int flag = 0;
for (int u = 0; u < 5; u++){ //判断矩阵是否已满
int flag1 = 0;
for (int v = 0; v < 5; v++){
if (a[u][v] == 0){
flag1 = 1;
break;
}
}
if (flag1 == 1){
flag = 1;
break;
}
}
if (flag == 0)break; //flag=0说明矩阵已经填满,跳出循环
}
for (int i=0;i<5;i++)
{
for(int j=0;j<5;j++)
{
arr10[i+5][j+5]=a[i][j];
}
}
}
#pragma endregion
#pragma region W {int a[5][5] = {0};
int num = 51; int i = 0;
int j = 5/2; int ci = 0;
int cj = 0; while (1){
a[i][j] = num++; //将num当前数存入a[i][j];
ci = i; //保存i当前值;
cj = j; //保存j当前值; if (ci == 0)i = 5 - 1; //判断上一个是否在第0行
else i--;
if (cj == 5 - 1){ //判断上一个是否在第N-1列
j = 0;
i = ci-1;
}
else j++;
if (a[i][j] != 0 || (ci == 0 && cj == 5 - 1)){ //判断下一个位置是否被占有,或上一个是否在第0行,第N-1列
i = ci+1;
j = cj;
} int flag = 0;
for (int u = 0; u < 5; u++){ //判断矩阵是否已满
int flag1 = 0;
for (int v = 0; v < 5; v++){
if (a[u][v] == 0){
flag1 = 1;
break;
}
}
if (flag1 == 1){
flag = 1;
break;
}
}
if (flag == 0)break; //flag=0说明矩阵已经填满,跳出循环
}
for (int i=0;i<5;i++)
{
for(int j=0;j<5;j++)
{
arr10[i][j+5]=a[i][j];
}
}
}
#pragma endregion
#pragma region W {int a[5][5] = {0};
int num = 76; int i = 0;
int j = 5/2; int ci = 0;
int cj = 0; while (1){
a[i][j] = num++; //将num当前数存入a[i][j];
ci = i; //保存i当前值;
cj = j; //保存j当前值; if (ci == 0)i = 5 - 1; //判断上一个是否在第0行
else i--;
if (cj == 5 - 1){ //判断上一个是否在第N-1列
j = 0;
i = ci-1;
}
else j++;
if (a[i][j] != 0 || (ci == 0 && cj == 5 - 1)){ //判断下一个位置是否被占有,或上一个是否在第0行,第N-1列
i = ci+1;
j = cj;
} int flag = 0;
for (int u = 0; u < 5; u++){ //判断矩阵是否已满
int flag1 = 0;
for (int v = 0; v < 5; v++){
if (a[u][v] == 0){
flag1 = 1;
break;
}
}
if (flag1 == 1){
flag = 1;
break;
}
}
if (flag == 0)break; //flag=0说明矩阵已经填满,跳出循环
}
for (int i=0;i<5;i++)
{
for(int j=0;j<5;j++)
{
arr10[i+5][j]=a[i][j];
}
}
}
#pragma endregion
for (int i=0;i<5;i++)
{
for (int j=0;j<2;j++)
{
if (i==2)
{
int k=j+2;
int temp=arr10[i][k];
arr10[i][k]=arr10[i+5][k];
arr10[i+5][k]=temp;
}
else
{
int temp=arr10[i][j];
arr10[i][j]=arr10[i+5][j];
arr10[i+5][j]=temp;
} }
}
for (int j=0;j<5;j++)
{
int temp= arr10[j][5+k];
arr10[j][5+k]=arr10[j+5][5+k];
arr10[j+5][5+k]=temp;
}
for (int i=0;i<10;i++)
{
for(int j=0;j<10;j++)
{
printf("%3d",arr10[i][j]);
}
printf("\n");
}
}
void main()
{ printf(" 奇数的数组23题已经打印 这里打印 n=10 n=8 两种情况\n");
MF5();
printf("\n\n\n");
int arr[8][8]={0};
MF494(arr);
system("pause");
}

代码编译以及运行

由于资源上传太多,资源频道经常被锁定无法上传资源,同学们可以打开VS2013自己创建工程,步骤如下:

1)新建工程

2)选择工程

3)创建完工程如下图:

4)增加文件,右键点击项目

5)在弹出菜单里做以下选择

6)添加文件

7)拷贝代码与运行

程序运行结果

代码下载

http://download.csdn.net/detail/yincheng01/6681845

解压密码:c.itcast.cn






基于visual Studio2013解决C语言竞赛题之1094纵横图的更多相关文章

  1. 基于visual Studio2013解决C语言竞赛题之0401阶乘

      题目 解决代码及点评 这个是一道经典的教科书题目,基本上每本基础的c/c++语言教科书都会有这个题目 用来演示循环语句 #include <stdio.h> #include ...

  2. 基于visual Studio2013解决C语言竞赛题之0205位数求和

     题目

  3. 基于visual Studio2013解决C语言竞赛题之0201温度转换

    题目 解决代码及点评 #include <stdio.h> #include <stdlib.h> void main() { float f; float c; float ...

  4. 基于visual Studio2013解决C语言竞赛题之0409 100以内素数

       题目 解决代码及点评 在已经知道素数是怎么判断的基础上,增加循环,可以判断出100以内的素数 /******************************************* ...

  5. 基于visual Studio2013解决C语言竞赛题之0408素数

      题目 解决代码及点评 判断一个数是不是素数的方法,一般是看n是不是能被n以内的某个整数(1除外)整除 为了提高效率,这个整数范围一般缩小到n的平方根 如果在这个范围内的整数都不能整除,那么 ...

  6. 基于visual Studio2013解决C语言竞赛题之0407最大值最小值

      题目 解决代码及点评 这道题考察循环和比较 /*********************************************************************** ...

  7. 基于visual Studio2013解决C语言竞赛题之0406数列求和

      题目 解决代码及点评 这个题目,还是考察for循环的使用 以及数列规律,该数列的特点是第n个分子 = 第n-1个分子 + 第n-2个分子,分母也是此规律 而另外一个规律是第n个分子和第n- ...

  8. 基于visual Studio2013解决C语言竞赛题之0405阶乘求和

      题目 解决代码及点评 这道题和上一道题类似,第n个累加项 = n-1累加项的n倍 由于有这个规律,我们可以用一个for循环实现 但是例子代码并没有这么做,大家可以回去修改下代码,使得代码更 ...

  9. 基于visual Studio2013解决C语言竞赛题之0404循环求和

      题目 解决代码及点评 这道题考验for循环和一个简单的算法 因为每次累加的值有规律,后面一次累加是前面一次累加的两倍 所以可以用简单的循环,计算累加项和累加结果 /************ ...

随机推荐

  1. 笔记之Cyclone IV第一卷第四章Cyclone IV器件中的嵌入式乘法器

    嵌入式乘法器可以配置成一个 18 × 18 乘法器,或者配置成两个 9 × 9 乘法器.对于那些大于18 × 18 的乘法运算 ,Quartus II 软件会将多个嵌入式乘法器模块级联在一起.虽然没有 ...

  2. Linux内核中的宏:__init and __exit

    ZZ FROM: http://blog.csdn.net/musein/article/details/742609 ======================================== ...

  3. Axis2(8):异步调用WebService

    在前面几篇文章中都是使用同步方式来调用WebService.也就是说,如果被调用的WebService方法长时间不返回,客户端将一直被阻塞,直到该方法返回为止.使用同步方法来调用WebService虽 ...

  4. e-mail Web端管理

    邮件是和上海的一家微软的代理商合作的,管理很方便,但是目前感觉他家的邮件过滤机制有问题.

  5. SUSAN检测算子

    USAN区域(核同值区):和核像素的灰度相同会相信的模板像素的区域. 利用这个区域的尺寸.重心.二阶矩等可以帮助检测图像的边缘和角点.利用USAN的面积作为特征可以起到增强边缘和角点的效果. 该方法不 ...

  6. UVa 10330 Power Transmission / 最大流

    最大流 这题有很多起点和终点 在取2个点(0和n+1) 作为唯一的起点和终点 此外每个点也有容量限制 建图时每条边上的容量为这条边和2个端的容量的最小值 然后EK就行 #include <cst ...

  7. 浅谈HTML之模仿人人网登陆界面(新手必学)

    为方便大家对web相关知识的了解,现谈谈新手如何从HTML css  Javascript到以后后台的发展.首先,让大家看看HTML仿人人登陆界面: <!doctype html> < ...

  8. 演练2-1:创建MVC默认项目

    在VS2012中点击“文件 | 新项目”,在弹出对话框中选择“Visual C# | Web | ASP.NET MVC 4 Web应用程序”. 在弹出的模板对话框中选择“Internet应用程序”和 ...

  9. SuperSocket源码解析之开篇

    一 简介 官方介绍:SuperSocket 是一个轻量级, 跨平台而且可扩展的 .Net/Mono Socket 服务器程序框架.你无须了解如何使用 Socket, 如何维护 Socket 连接和 S ...

  10. Jquery学习笔记: attr和 prop的区别,以及为html标签自定义属性

    一.自定义html标签属性 对于html文件中的html标签,可以自定义属性,如: <a href="#" id="link1" action=" ...