| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1935 人关注过本帖
标题:隆重感谢 moonwalker朋友 完成合数分解
只看楼主 加入收藏
精灵传说
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2008-3-25
收藏
 问题点数:0 回复次数:14 
隆重感谢 moonwalker朋友 完成合数分解
非常感谢 moonwalker朋友 我一星期的努力终于出了成果(新手菜,大家勿笑)
由于对这个问题 一直没有足够的自信 所以我的程序是当草稿写的 非常难看
由于还有是实验版本 我把所有情况都列出来了  并且貌似有很多BUG 能力有限
嘿嘿
#include <stdio.h>

  static int a[50]={    2,   3,   5,   7,  11,  13,  17,  19,  23,  29,
               31,  37,  41,  43,  47,  53,  59,  61,  67,  71,
               73,  79,  83,  89,  97, 101, 103, 107, 109, 113,
               127,131, 137, 139, 149, 151, 157, 163, 167, 173,
               179,181, 191, 193, 197, 199, 211, 233, 227, 229,
           };
int sushu(int n)
{
   int i = 0;

     for( i=2 ; i<n ; i++)
     {
       if (n%i == 0)
       {
    return(0);
       }
     }
       if(i >= n)
       {
    return(1);
       }
}
int Check2(int b[50])
{
int i;
int j;
for(i=0 ;i<50 ;i++)
{
for(j=i+1 ;j<50 ;j++)
{
if(b[i]==b[j] && b[i]!=0)
return(1);
}
}
if (i>=20)
return(0);
}
int Check3(int b[],int i)
{
int j;

for(j=0 ; j<50 ; j++)
{
if (i==b[j])
 {
 return(1);
 }
}
if(j>=50)
return(0);
}
int main(void)
{
int n = 0;
int i = 0;
int j = 0;
int sum = 0;
void Check1(int n,int i);
int loop(int l,int k,int n,int i,int b[]);
 printf("press a number please:\n");
  loop: scanf("%d",&n);
  if (sushu(n) || n<7)
   {
    printf("error input again please:\n");
    goto loop;
   }
    for(i=0 ; i<50 ; i++)
     {
       sum+=a[i];
       if (sum == n)
       {
    for(j=0 ; j<=i ; j++)
    {
    printf("%d,",a[j]);
    }
    printf("\npress any key to exit\n");
    getch();
    return(0);
       }
       if (sum > n)
       {
       n=n-(sum-a[i]);
       Check1(n,i-1);
       printf("press any key to exit\n");
       getch();
       return(0);
       }
     }
}

void Check1(int n,int i)
{
 int l = 1;
 int k = 0;
 int b[50];
 int j;
 for(j=0;j<50;j++)
 b[j]=0;

 for(k=1 ; k<=i ; k++)
 {
 if(loop(l,k,n,i,b))
 {
 break;
 }
 }
}

int loop(int l,int k,int n,int i,int b[])
{
int m,o;
int sum=0;

for(m=0 ; m<=i ; m++)
{
 b[l-1]=a[m];
 if (Check2(b))
 continue;
 if (l != k)
 {
 loop(l+1,k,n,i,b);
 }
 else {
 sum=0;
 for(o=0; o<50; o++)
 {
 sum+=b[o];
 }
 if(sushu(sum+n) && sum+n>a[i])
  {
   printf("%d,",sum+n);
   for(o=0;o<=i;o++)
   {
    if(Check3(b,a[o]))
    {
    continue;
    }
   printf("%d,",a[o]);
    }
   printf("\n");
   return(1);
  }
 for(o=0; o<50; o++)
 {
  if(b[o]!=a[i] && b[o]!=0)
  break;
 }
 if (o>=50)
 return(0);

     }
}
}
收到的鲜花
搜索更多相关主题的帖子: 合数 moonwalker 分解 朋友 感谢 
2008-04-17 12:42
yd4433
Rank: 1
等 级:新手上路
帖 子:404
专家分:0
注 册:2008-3-9
收藏
得分:0 
搜索质数表??? 着方法确实对那个问题不错

------...-.-..-...-----........-------.......----.....------....||- - !
2008-04-17 12:47
yd4433
Rank: 1
等 级:新手上路
帖 子:404
专家分:0
注 册:2008-3-9
收藏
得分:0 
不错 再顶下咯

------...-.-..-...-----........-------.......----.....------....||- - !
2008-04-17 12:48
雨中飛燕
Rank: 1
等 级:新手上路
帖 子:765
专家分:0
注 册:2007-10-13
收藏
得分:0 
编译了一下,有错误,修改后,运行,总是有错。。。
想问问楼主做的到底什么题目??

" border="0" />
2008-04-17 12:56
雨中飛燕
Rank: 1
等 级:新手上路
帖 子:765
专家分:0
注 册:2007-10-13
收藏
得分:0 
哦。。。。看了一下代码,现在知道了
不过,为什么只分解合数呢?质数也可以啊

" border="0" />
2008-04-17 13:03
精灵传说
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2008-3-25
收藏
得分:0 
不会吧 我这里可以运行的啊 输入100 显示2,3,5,7,11,13,17,19,23, 我用的是颖思2。01
编译成功后 以WINTC格式打开 然后复制 粘贴过来的 理论上没有问题的说 先上课去了 嘿嘿
2008-04-17 13:06
雨中飛燕
Rank: 1
等 级:新手上路
帖 子:765
专家分:0
注 册:2007-10-13
收藏
得分:0 
还有,24的分解结果不完全,出现漏解

" border="0" />
2008-04-17 13:09
精灵传说
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2008-3-25
收藏
得分:0 
自己顶一下  一定要坚持到让moonwalker朋友 看到 可不能提前沉了
2008-04-17 15:38
精灵传说
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2008-3-25
收藏
得分:0 
再顶下 顺便问下 论坛铜板是怎么回事啊 我也想要
2008-04-17 18:40
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
呵呵..上面有燕子的马甲?..lz的程序没仔细看..怎么有点像背包问题?我前几天写过一个..你可以找看看..

学习需要安静。。海盗要重新来过。。
2008-04-17 18:56
快速回复:隆重感谢 moonwalker朋友 完成合数分解
数据加载中...
 
   



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

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