| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2188 人关注过本帖
标题:将1,2,3,4……20这20个自然数排成一个圈,使任意两个相邻的自热数之和均为素 ...
只看楼主 加入收藏
婷婷99
Rank: 1
等 级:新手上路
帖 子:48
专家分:7
注 册:2012-2-28
结帖率:25%
收藏
已结贴  问题点数:20 回复次数:15 
将1,2,3,4……20这20个自然数排成一个圈,使任意两个相邻的自热数之和均为素数。

希望读者可以耐心看完我的代码。
#include <stdio.h>
#include <math.h>
bool sushu(int m)//判断是否是素数
{
int i;
for(i = 2; i <= sqrt(m) ; i ++)
{
if(m % i == 0)
break;
else
continue;
}
if(i > sqrt(m))
return true;
else
return false;
}
void quan(int a[], int b[], int m, int j)//围圈
{
int i;
for(i = 1; i < m; i ++)
{
if(a[i] != b[j] && sushu(b[j] + a[i]) && a[i] != 0)
{
b[++ j] = a[i];//如果满足条件就将a[i]加到数组b中。
a[i] = 0; //同时将a[i]变成0
quan(a, b, m, j);//继续
}
}   
}
int main()
{
int a[20], b[20], i, j;
printf("*******初始化数组**********\n");
for(i = 0; i < 20; i ++)
a[i] = i + 1;
j = 0;
b[j] = a[0];//将b[0]初始化为a[0]
a[0] = 0;

printf("b[%d] = %d\n",j,b[j]);

quan(a, b, 20, j);
printf("\n");
printf("*******围成的圈是**********\n");
for(i = 0; i < 20; i ++)
printf("%d ",b[i]);
printf("\n");
return 0;
}
运行的结果是:1 2 3 4 7 6 5 8 9 10 13 16 15 17 12 11 20 19 -858993460,为什么会是这个结果呢?想了好久还是想不明白,希望高手可以帮帮指点指点。
搜索更多相关主题的帖子: void 读者 include 自然数 return 
2012-03-23 14:33
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:5 
看这个情况越界了是不是越界了。

问题是存在这样的圈圈吗?



[ 本帖最后由 有容就大 于 2012-3-23 15:09 编辑 ]

梅尚程荀
马谭杨奚







                                                       
2012-03-23 14:39
婷婷99
Rank: 1
等 级:新手上路
帖 子:48
专家分:7
注 册:2012-2-28
收藏
得分:0 
回复 2楼 有容就大
应该存在吧,虽然我没有得到结果。这是一本书上的思考题。
2012-03-23 17:08
c_cup
Rank: 2
等 级:论坛游民
帖 子:20
专家分:71
注 册:2012-3-21
收藏
得分:5 

以下是引用有容就大在2012-3-23 14:39:36的发言:
看这个情况越界了是不是越界了。
问题是存在这样的圈圈吗?
先不管存不存在的问题,起码这种方法没有求出来..

输出结果是应为最后一个b[19] 没有被赋值, 原因是 j 到 18 时,a[]中已经没有匹配数了.

成功就像怀孕,大家都来恭喜你,但是没人知道你被操了多少次.
2012-03-23 17:10
婷婷99
Rank: 1
等 级:新手上路
帖 子:48
专家分:7
注 册:2012-2-28
收藏
得分:0 
回复 4楼 c_cup
因为12可以和11匹配也可以和19匹配,但是我这么写循环的话,先找到11,但是19才是最合适的。而我不知道怎么回溯回去了……
2012-03-23 18:26
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
以下是引用婷婷99在2012-3-23 17:08:16的发言:

应该存在吧,虽然我没有得到结果。这是一本书上的思考题。
什么书?我去学习下。

梅尚程荀
马谭杨奚







                                                       
2012-03-23 19:01
婷婷99
Rank: 1
等 级:新手上路
帖 子:48
专家分:7
注 册:2012-2-28
收藏
得分:0 
C程序百例
2012-03-23 20:26
c_cup
Rank: 2
等 级:论坛游民
帖 子:20
专家分:71
注 册:2012-3-21
收藏
得分:0 
回复 5楼 婷婷99
a[]数组: 1 2 3 ......18 19 20; 2 3 4 ......19 20 1;......
这种方式应该可以, 只是肯定是最笨的办法了. 遍历从来都是最笨的了

成功就像怀孕,大家都来恭喜你,但是没人知道你被操了多少次.
2012-03-23 20:39
婷婷99
Rank: 1
等 级:新手上路
帖 子:48
专家分:7
注 册:2012-2-28
收藏
得分:0 
回复 8楼 c_cup
不过你给的这两组都不对,第一组的第一个数和最后一个数连起来1 + 20 = 21是一个合数,第二组的19 + 20 也是一个合数。
2012-03-23 20:53
c_cup
Rank: 2
等 级:论坛游民
帖 子:20
专家分:71
注 册:2012-3-21
收藏
得分:0 
回复 9楼 婷婷99
遍历啊!!!!
1 2 3......19 20
2 3 4......20 1
3 4 5 .....1 2
......
20 1 2......18 19

成功就像怀孕,大家都来恭喜你,但是没人知道你被操了多少次.
2012-03-24 09:10
快速回复:将1,2,3,4……20这20个自然数排成一个圈,使任意两个相邻的自热数之和 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023776 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved