| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1573 人关注过本帖
标题:求大神帮我优化一下算法和提供一下一道题的思路。谢谢
只看楼主 加入收藏
tomandmessi
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2015-12-27
结帖率:0
收藏
已结贴  问题点数:20 回复次数:14 
求大神帮我优化一下算法和提供一下一道题的思路。谢谢
#include<stdio.h>
#include<math.h>
int main()
{
 int i,n,flag,temp,sum=0,num=0;
 printf("请输入所要求的水仙花数位数(1<=n<=10):\n");
 scanf("%d",&n);
 while(n<1||n>10)
 {
  printf("位数不正确!请重新输入(1<=n<=10):\n");
  scanf("%d",&n);
 }
 flag=pow(10,n);
 for(i=flag/10;i<flag;i++)        
 {
  sum=0;               
  temp=i;               
  while(temp!=0)   
  {
   sum+=pow((temp%10),n);   
   temp/=10;                           
  }
  if(sum==i)           
  {
   printf("%d\n",i);
   num++;               
  }
 }
 printf("%d位水仙花数有%d个\n",n,num);
 return 0;}9位数和10位数的输不出来,8位数输出来也比较慢。
帮我看一下这道题。编程验证6-1000以内“哥德巴赫猜想”是否成立。“哥德巴赫猜想”:任何大于2的偶数都可以表示成两个素数之和。
要求同时输出到文件和屏幕,输出形式:
  4=  2+ 2    6=3+3   8=3+5    10=3+7   12= 5+7
 14= 3+11……
 每行输出6组数据,排列整齐。
谢谢。
2015-12-27 21:48
tomandmessi
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2015-12-27
收藏
得分:0 
2015-12-27 22:08
tomandmessi
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2015-12-27
收藏
得分:0 
2015-12-27 22:34
tomandmessi
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2015-12-27
收藏
得分:0 
2015-12-27 22:49
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
帮你把第二个弄下吧,慢慢逐句读懂了,你就领先同学了。
程序代码:
#include<stdio.h>
int isprim(int n)
{//判断是否是素数,是返回1,否返回0
    int i;
    for(i=2;i*i<=n&&n%i;i++);
    return i*i>n;
}
void main()
{
    int i,j,k;
    for(i=6,k=1;i<1001;i+=2)
    {
        j=i/2;
        for(;!(isprim(j)&&isprim(i-j))&&j>1;j--); //获取最接近的两个素数
        if(j>1)
        {
            printf("%5d=%3d+%3d",i,j,i-j); //显示算式结果
            if(!(k=(k++)%6))printf("\n");  //每6行一组显示
        }
    }
}

图片附件: 游客没有浏览图片的权限,请 登录注册

能编个毛线衣吗?
2015-12-27 23:13
tomandmessi
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2015-12-27
收藏
得分:0 
回复 5楼 wmf2014
谢谢啦
2015-12-28 10:04
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:7 
回复 6楼 tomandmessi
if(!(k=(k++)%6))printf("\n");  //每6行一组显示
这一句在vc6里运行正常,用gcc编译器无法实现每6个数据一行,需改成if(!((k++)%6))printf("\n");

能编个毛线衣吗?
2015-12-28 10:49
tomandmessi
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2015-12-27
收藏
得分:0 
继续来人啊。
2015-12-28 12:18
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:7 
程序代码:
#include <stdio.h>

void foo( unsigned n )
{
    static unsigned long long table[11][11] = { 0 };
    if( table[0][0] == 0 )
    {
        for( size_t i=0; i!=sizeof(table)/sizeof(*table); ++i )
        {
            unsigned long long t = 1;
            for( size_t j=0; j!=sizeof(*table)/sizeof(**table); ++j, t*=i )
                table[i][j] = t;
        }
    }

    for( unsigned a=0; a<=n; ++a )
    for( unsigned b=0; b<=n-a; ++b )
    for( unsigned c=0; c<=n-a-b; ++c )
    for( unsigned d=0; d<=n-a-b-c; ++d )
    for( unsigned e=0; e<=n-a-b-c-d; ++e )
    for( unsigned f=0; f<=n-a-b-c-d-e; ++f )
    for( unsigned g=0; g<=n-a-b-c-d-e-f; ++g )
    for( unsigned h=0; h<=n-a-b-c-d-e-f-g; ++h )
    for( unsigned i=0; i<=n-a-b-c-d-e-f-g-h; ++i )
    {
        unsigned long long sum = a*table[1][n] + b*table[2][n] + c*table[3][n] + d*table[4][n] + e*table[5][n] + f*table[6][n] +

g*table[7][n] + h*table[8][n] + i*table[9][n];
        if( sum >= table[10][n-1] )
        {
            unsigned buf[10] = { 0, a, b, c, d, e, f, g, h, i };
            for( unsigned long long s=sum; s; s/=10 )
                --buf[s%10];
            if( buf[1]==0 && buf[2]==0 && buf[3]==0 && buf[4]==0 && buf[5]==0 && buf[6]==0 && buf[7]==0 && buf[8]==0 && buf[9]==0

)
                printf( "    %llu\n", sum );
        }
    }
}

int main( void )
{
    puts("3位水仙花有:"); foo(3);
    puts("4位水仙花有:"); foo(4);
    puts("5位水仙花有:"); foo(5);
    puts("6位水仙花有:"); foo(6);
    puts("7位水仙花有:"); foo(7);
    puts("8位水仙花有:"); foo(8);
    puts("9位水仙花有:"); foo(9);
    puts("10位水仙花有:"); foo(10);

    return 0;
}

输出:
3位水仙花有:
    407
    370
    371
    153
4位水仙花有:
    9474
    8208
    1634
5位水仙花有:
    54748
    93084
    92727
6位水仙花有:
    548834
7位水仙花有:
    9800817
    9926315
    4210818
    1741725
8位水仙花有:
    88593477
    24678050
    24678051
9位水仙花有:
    534494836
    472335975
    912985153
    146511208
10位水仙花有:
    4679307774
2015-12-28 15:32
tomandmessi
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2015-12-27
收藏
得分:0 
回复 9楼 rjsp
能够再说明一下吗,菜鸟表示不是很懂。还是十分感谢的。
2015-12-28 17:03
快速回复:求大神帮我优化一下算法和提供一下一道题的思路。谢谢
数据加载中...
 
   



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

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