怎样用C语言编写这个程序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎样用C语言编写这个程序相关的知识,希望对你有一定的参考价值。

有一个5*5的表格,将1,2,3,4四个数填入到这25个小格中,其中1可以放在任何小格中,2必须和1相邻,3必须和1,2都相邻,4则要和1,2,3,都相邻,怎样填写这些数字才能够使这个表格里所有数字的和最大
高手在哪啊,高手,求高手指点。

#include "stdio.h"
#include "conio.h"
#include "dos.h"

typedef struct

int x;
int y; //二维坐标
int value; //每4进制位的值
int near_flag;
/*权值,
二进制:000
第1位是1表示已经与0相连
第2位是1表示已经与1相连
第3位是1表示已经与2相连
例:
110 :表示与2和1相连,但是不与0相连
111 :表示与0,1,2都相连
001 :表示与0相连,与1,2不相连
*/
xy_value;

xy_value num[26];
/* 判断权位,确定相连的数是否符合 */
jdg_flag()

int i;
for(i=0;i<25;i++)
switch (num[i].value)

case 3: if( num[i].near_flag != 6) return 0; else break;
case 2: if(( num[i].near_flag& 3)!= 3) return 0; else break;
case 1: if(( num[i].near_flag& 1)!= 1) return 0; else break;


return 1;



flag()//初始化权位

int i;
int x,y;
for(i=0;i<25;i++)

x=num[i].x;
y=num[i].y;

if((x-1)>=0) //如果越界,则越界的那边不给予权值
num[i].near_flag|=(1<<(num[(x-1)*5+y].value));
if((x+1)<=4)
num[i].near_flag|=(1<<(num[(x+1)*5+y].value));
if((y-1)>=0)
num[i].near_flag|=(1<<(num[(y-1)+x*5].value));
if((y+1)<=4)
num[i].near_flag|=(1<<(num[(y+1)+x*5].value));



/* 增加1 */
addnum(int i)

num[i].value+=1;
if(num[i].value==4)

num[i].value=0;
i=addnum(i+1);

return i;


main()


int i,sumbuff=0,sum=0;
int x,y;
for( i= 0; i< 26; i++)//初始化结构体

num[i].value= 0;
num[i].x= (int)(i/ 5); //初始化坐标
num[i].y= i% 5;


while( num[25].value== 0)

addnum(0); //0表示从第一位开始
flag();

if(!jdg_flag())


for(i=0;i<25;i++)
num[i].near_flag&=0; /*由于不符合条件,必须消除消权*/
continue;

for( i=0; i<25; i++)
sumbuff+=num[i].value; //能运算到这,说明符合条件.求和
if(sumbuff>sum)//输出目前得到的 满足条件的 最大和的 矩阵

for(x=0;x<5;x++)

for(y=0;y<5;y++)
printf("%d ",num[x*5+y].value);
printf("\n");


sum=sumbuff;
printf("now sum is:%d\n",sum);
printf("\n");

sumbuff=0;


for(x=0;x<5;x++)

for(y=0;y<5;y++)
printf("%d ",num[x*5+y].value);
printf("\n");





这是最笨的方法,一个个比较。。我跑半个小时了 - -!
一共有1000多万亿种,3G CPU,每秒30亿次浮点型运算。假设每次比较一次需要一个浮点型的话,需要100小时左右!那么。。。这个算法 将摇摇无期。。。 跑上一年我都不觉得奇怪。。
算法,基本没有。
1.当成二维坐标。
2.赋值结构体的时候,我是弄成类似25位的4进制数。每个结构体中的value为每位的数值。
26位为循环用的标志位。每次循环,4进制数,增加一。正好可以遍历所有的数。
额。。我写成的是 0,1,2,3四个数字填。
20:54--------------------------
目前情况是这样的:
3 2 1 0 1
1 0 2 2 3
3 2 2 1 2
2 1 0 0 0
0 0 0 0 0
now sum is:28
参考技术A 我目前所想到的,不一定完全正确
第一步:5*5的空格中每个空格初始化为1

第二步:把每个空格中的数字1再+1试试,符合2必须和1相邻条件则加一
然后每行就是21212,21212,21212,21212,21212

然后以此类推
参考技术B 每个格的上下左右是相邻,左上角左下角,右上角右下角,算不算相邻?我试试看能不能编出来追问

只有上下左右才算相邻

参考技术C 这个我以前解过,和一个很有名的堆房子手机游戏city bloxx的部分内容一样。
这个的数学论证方法在这:club。tech。163。com/bbs/mobile_0s22/92272018。html (把。改成.)
参考技术D 你的相邻是什么意思?斜着的(比如左上角算不)算么???一个格子旁边有8个,是最接近的那4个还是8个都可以?追问

只有最近的4个方向才可以

第5个回答  2011-08-29 int i;
int sum;
for(i=1;i<=10;i++)

sum = sum + i;


手头没用C++ 大概这个意思

C语言设计出来的程序 的背景颜色怎样通过代码控制?

下面给一个简单的程序, 给这个程序加上以下代码 ,只要能把颜色改变。
把改变厚的代码写在下面 要把改变颜色的代码与我上面的代码结合起来,然后我会当场输入编译器 查看 是否有效! 在网上看了很多资料都无法改变颜色 才想了这个办法。

#include<stdio.h>
main()
float pi=3.14159265,r;
printf("enter radius:\n");
scanf("%f",&r);
if(r<0)
printf("Enter Error\n");
else
printf("r=%.2f,c=%.2f,area=%.2f\n",r,2*pi*r,pi*r*r);
system("pause");

最好留下联系方式(q),那样我会优先采纳。 前面四位我都试了 不行,给出答案以前一定要自己先试验一下。达到背景黑色变成其他颜色,字体颜色随便

system("COLOR 17"); // DOS 窗 背景兰色字白色 

system("COLOR 34"); // DOS 窗 背景淡兰色字红色 

自己尝试尝试,就会发现很多种颜色的组合的 

这么做: 

#include<stdio.h> 

#include<stdlib.h> 

main() 

float pi=3.14159265,r; 

//system("COLOR 17"); // DOS 窗 背景兰色字白色 

system("COLOR 34"); // DOS 窗 背景淡兰色字红色 

printf("enter radius:\\n"); 

scanf("%f",&r); 

if(r<0) 

printf("Enter Error\\n"); 

else 

printf("r=%.2f,c=%.2f,area=%.2f\\n",r,2*pi*r,pi*r*r); 

system("pause"); 

//给出答案以前一定要自己先试验一下。达到背景黑色变成其他颜色,字体颜色随便

说别人的答案不对之前,自己最好先确认一下自己的编译器设置之类的是不是正确,这么多人的都不对,你不觉得应该先找找自己的原因?

下面的图是我的代码的运行结果,

编译器VC6.0

参考技术A 已经按你的要求重新改写,简化。
本题一个完整的c程序如下,程序在tc2.0和win-tc下运行通过,结果正确。
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>

main()
float pi=3.14159265,r;
textbackground(YELLOW);/* 设置背景色为黄色,注意颜色应该大写,可更改 */
textcolor(RED); /* 设置文件颜色为红色,可更改 */
clrscr(); /* 清屏,使设置生效 */
printf("enter radius:");
scanf("%f",&r);
if(r<0)
printf("Enter Error!\n");
else
printf("r=%.2f,c=%.2f,area=%.2f\n",r,2*pi*r,pi*r*r);
system("pause");/* 暂停,按任一键继续 */


---------------------------------------------------------------------
---------------------------------------------------------------------
以下仅供参考。可以连续输入8次,每次得到的颜色不同,当然可以改变for (color = 0; color < 8; color++)中color<8的数值来控制输出的颜色数。
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<graphics.h>
main()
float pi=3.14159265,r;
int color;
for (color = 0; color < 8; color++)

textbackground(color);
cprintf("This is color %d\r\n", color);
cprintf("enter radius:");
scanf("%f",&r);
if(r<0)
cprintf("Enter Error!\r\n");
else
cprintf("r=%.2f,c=%.2f,area=%.2f\r\n",r,2*pi*r,pi*r*r);
cprintf("Press any key to continue\r\n");
getch();

system("pause");


你可以参阅:
http://zhidao.baidu.com/question/86663727.html
http://zhidao.baidu.com/question/79605706.html
http://zhidao.baidu.com/question/79605348.html本回答被提问者采纳
参考技术B 你是要做 Windows 下面做吗?
以前我有做过,你去 msdn 上查查怎么控制命令行下的字体和颜色就知道了。
参考技术C #include<stdio.h>
#include<stdlib.h>
void main()
float pi=3.14159265,r;
system("color F0");
printf("enter radius:\n");
scanf("%f",&r);
if(r<0)
printf("Enter Error\n");
else
printf("r=%.2f,c=%.2f,area=%.2f\n",r,2*pi*r,pi*r*r);
system("pause");


你要的是这种效果?

以上是关于怎样用C语言编写这个程序的主要内容,如果未能解决你的问题,请参考以下文章

C语言设计出来的程序 的背景颜色怎样通过代码控制?

这个C语言程序怎么用

C语言编写的程序,怎样隐藏运行,不弹CMD窗口

怎样用c语言编写以年月日的格式输入一个人的生日和当前日期,来计算这个人的年龄

怎样用c语言编写将字符串转换为整数的函数

怎样用C语言编写个爱心图象