请教一道C语言问题算法

来源:百度知道 编辑:UC知道 时间:2024/06/06 03:22:17
如图,
*
* * *
* * * * *
* * * * * * * * *
每一个星放一个数,从而使得每一行每一列的数都是完全平方数(多位数不能以0开头)。
要求,不超过4层内嵌,运行时间不能超过0.05s。
冥思苦想也没想到,怎么想都有6层内嵌,希望高手指教一下,谢谢
不好意思,baidu的格式和我打出来的不同
星号应该是中间对称的,就是
*
* * *
第一排是一个1位数,第二排是一个3位数,第三排是一个5位数

第四排是一个9位数,把他们中间对称放,每一竖排也是完全平房数

比如说:如果只有两行数

第一行是 1
第二行是X6X
那么16是完全平房,满足条件

嗯,我上面说了,第四行是一个9位数,要求不能超过四层循环= =
感谢你还用心编程序去算了,我们题目的要求是最多四层缩进,如果有五层以上就要扣分,而且不准用子函数。缩进就是说主函数到第一层循环这都是一次缩进,所以循环嵌套超过3个肯定是不行的(因为连if语句后面接上了continue都算一层= =),我最后是三层循环,因为最里层还有一个判断语句,加上主函数,一共是五层,就让老师扣一分吧= =
对了,我的答案有两个,一个是9,529,17161,116661601
第二个是1,121,44944,119464900

题目是指明了。。要求你只输出四行时的情况么?

这个有解没?我怎么程序运行出来没答案啊?
例如这样符合要求不?
1
169
62001
194100624 九位数的开头两个和末尾两个数字如果要求成为平方数的话,我的算法就算不除答案。很奇怪。。。

按行做4重循环,具体是这样的:
第一行:1位的完全平方数,所以从1到3循环
第二行:3位数,从10到31循环
第三行:5位数,从100到316循环
第四行:9位数,从10000到31622循环
这样保证了每行都是完全平方数,
之后在最内层循环做列是否是完全平方数的判断,
这个就用不到循环了,只是除法结合取余运算就可以了,这个会吧~~

这样总循环次数大概是10^9-10^10,我不确定会不会超时,你可以先写写试试,

一个比较好的优化办法就是循环倒过来做,从第四行开始循环,这样在第2层循环(也就是枚举第三行的时候)就可以判断第3列和第7列是否是完全平方数如果不是,再内层的循环就可以不做了,第3层循环同理……

先想到的就这么多,按上述办法优化一下应该不会超时了感觉~~