鱼C论坛

 找回密码
 立即注册
查看: 3013|回复: 12

[技术交流] 怎么通过编程解决这个问题

[复制链接]
发表于 2011-7-31 22:04:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
这是个数学题目,想通过编程实现
具体看截图

未命名1.jpg


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-7-31 22:11:57 | 显示全部楼层
是你想要实现还是可以用编程实现???
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-1 00:47:53 | 显示全部楼层
本帖最后由 Be_envious 于 2011-8-1 00:57 编辑
  1. #include<stdio.h>

  2. float mi(float d,float m)
  3. {
  4. int i;
  5. float result=0;
  6. for(i=0;i<m;i++)
  7. {
  8. result=d;
  9. result=result*d;
  10. }
  11. return result;
  12. }



  13. main()
  14. {
  15. float x,y,z;
  16. int i=0,j=0,k=0;
  17. float a,b,c;
  18. for(i=0;i<10000;i++)
  19. {
  20. x=i+1;
  21. for(j=0;j<10000;j++)
  22. {
  23. y=j+1;
  24. for(k=0;k<10000;k++)
  25. {
  26. z=k+1;
  27. if((x!=y)&&(y!=z)&&(z!=x))
  28. {
  29. a=mi(mi(x,y),z);
  30. b=mi(mi(y,z),x);
  31. c=mi(mi(z,x),y);
  32. if((a==b)&&(b==c))
  33. {
  34. printf("x,y,z:");
  35. printf("%f %f %f \n",x,y,z);
  36. }
  37. }
  38. }
  39. }
  40. }
  41. system("pause");
  42. }

复制代码
用C语言干这个事真是缺德,下次要考虑用别的语言试试,10以内没有结果,就加到100还是没有结果,没办法就只好用float了
直接给了10000,杯具了,代码没有错,就是效率太低了,哪位高手谁能优化下.

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-1 00:58:03 | 显示全部楼层
  1. #include<stdio.h>

  2. long mi(long d,long m)
  3. {
  4.     int i;
  5.     long result=0;
  6.     for(i=0;i<m;i++)
  7.     {
  8.                     result=d;
  9.                     result=result*d;
  10.     }
  11.     return result;
  12. }



  13. main()
  14. {
  15. long x,y,z;
  16. int i=0,j=0,k=0;
  17. long a,b,c;
  18. for(i=0;i<1000;i++)
  19. {
  20.                  x=i+1;
  21.                  for(j=0;j<1000;j++)
  22.                  {
  23.                                   y=j+1;
  24.                                   for(k=0;k<1000;k++)
  25.                                   {
  26.                                                    z=k+1;
  27.                                                    if((x!=y)&&(y!=z)&&(z!=x))
  28.                                                    {
  29.                                                                        a=mi(mi(x,y),z);
  30.                                                                        b=mi(mi(y,z),x);
  31.                                                                        c=mi(mi(z,x),y);
  32.                                                                        if((a==b)&&(b==c))
  33.                                                                        {
  34.                                                                                      printf("x,y,z:");
  35.                                                                                      printf("%d %d %d \n",x,y,z);
  36.                                                                        }
  37.                                                    }
  38.                                   }
  39.                  }
  40. }
  41.                  system("pause");
  42. }
复制代码
稍微改了下 但是还是很费时间
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-1 10:44:03 | 显示全部楼层
  1. #include<stdio.h>

  2. long mi(long d,long m)
  3. {
  4.     int i;
  5.     long result=d;
  6.     for(i=0;i<m;i++)
  7.     {
  8.                     result=result*d;
  9.     }
  10.     return result;
  11. }



  12. main()
  13. {
  14. long x,y,z;
  15. int i=0,j=0,k=0;
  16. long a,b,c;
  17. for(i=0;i<1000;i++)
  18. {
  19.                  x=i+1;
  20.                  for(j=0;j<1000;j++)
  21.                  {
  22.                                   y=j+1;
  23.                                   for(k=0;k<1000;k++)
  24.                                   {
  25.                                                    z=k+1;
  26.                                                    if((x!=y)&&(y!=z)&&(z!=x))
  27.                                                    {
  28.                                                                        a=mi(mi(x,y),z);
  29.                                                                        b=mi(mi(y,z),x);
  30.                                                                        c=mi(mi(z,x),y);
  31.                                                                        if((a==b)&&(b==c))
  32.                                                                        {
  33.                                                                                      printf("x,y,z:");
  34.                                                                                      printf("%d %d %d \n",x,y,z);
  35.                                                                        }
  36.                                                    }
  37.                                   }
  38.                  }
  39. }
  40.                  system("pause");
  41. }

  42.   
复制代码
成功了 1000以内的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-1 11:21:17 | 显示全部楼层
  1. #include<stdio.h>

  2. long mi(long d,long m)
  3. {
  4.     int i;
  5.     long result,t;
  6.     for(i=1;i<m;i++)
  7.     {
  8.                     t=d;
  9.                     result=t*d;
  10.                     d=result;
  11.     }
  12.     return result;
  13. }



  14. main()
  15. {
  16. int x,y,z;
  17. int i=0,j=0,k=0;
  18. long a,b,c;
  19. for(i=0;i<10;i++)
  20. {
  21.                  x=i+1;
  22.                  for(j=0;j<10;j++)
  23.                  {
  24.                                   y=j+1;
  25.                                   for(k=0;k<10;k++)
  26.                                   {
  27.                                                    z=k+1;
  28.                                                    if((x!=y)||(y!=z)||(z!=x))
  29.                                                    {
  30.                                                                        a=mi(mi(x,y),z);
  31.                                                                        b=mi(mi(y,z),x);
  32.                                                                        c=mi(mi(z,x),y);
  33.                                                                        if((a==b)||(b==c))
  34.                                                                        {
  35.                                                                                      printf("x,y,z,a,b,c:");
  36.                                                                                      printf("%d %d %d %ld %ld %ld \n",x,y,z,a,b,c);
  37.                                                                        }
  38.                                                    }
  39.                                   }
  40.                  }
  41. }
  42.                  system("pause");
  43. }
复制代码
最后一个了 不整了 总是有问题  应该可以给你一些提示
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-1 12:59:07 | 显示全部楼层
这题是拿来折腾CPU的    !
楼主还是让它折腾肉脑吧,又不会坏,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-1 14:29:28 | 显示全部楼层
楼上的都搞复杂了。。。
比如for的嵌套循环改成这样就可以了:
  1. for (int x=1;x<11,x+=)
  2.       for (int y=x+1;y<11;y++)
  3.              for (int z=y+1;z<11;z++)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-8-2 09:22:08 | 显示全部楼层
谢谢楼上的几位兄弟,但是你们有没有你们都当xyz是整数来算

有没有解出方程再算的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-8-2 09:50:40 | 显示全部楼层
x^y^z楼上那位理解错误了吧
a=mi(mi(x,y),z);
应该是mi(x,mi(y,z));
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-8-2 09:56:16 | 显示全部楼层
稍微修改了,但这样效率极低,希望高手能解出来
  1. #include<stdio.h>
  2. long mi(long d,long m)
  3. {
  4.     int i;
  5.     long result=1;
  6.     for(i=0;i<m;i++)
  7.     {
  8.                 result=result*d;
  9.     }
  10.     return result;
  11. }

  12. main()
  13. {
  14.         long x,y,z,a,b,c,max=100;
  15.         for(x=2;x<max;x++)
  16.                 for(y=x+1;y<max;y++)
  17.                         for(z=y+1;z<max;z++)
  18.                         {
  19.                                 if((x!=y)&&(y!=z)&&(z!=x))
  20.                                 {
  21.                                 a=mi(x,mi(y,z));
  22.                                 b=mi(y,mi(z,x));
  23.                                 c=mi(z,mi(x,y));
  24.                                 if((a==b)&&(b==c))
  25.                                 {
  26.                                         printf("x,y,z:%d,%d,%d\n",x,y,z);
  27.                                 }
  28.                                 }

  29.                         }

  30. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-8-3 17:58:19 | 显示全部楼层
突然输出下abc发现原来位数远远不够
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-6 16:03:25 | 显示全部楼层
哈哈哈。。。测试成功。。。x=3,y=9,z=5。。。
  1. #include<stdio.h>
  2. #define num 10
  3. int nx(int,int,int);
  4. int main(){
  5.         int x,y,z;
  6.         for(x=1;x<num;x++){
  7.                 printf("%d\n",x);
  8.                 for(y=2;y<num;y++)
  9.                         for(z=3;z<num;z++){
  10.                                 int a=nx(y,z,x);
  11.                                 if((nx(x,y,z)==a)&&(a==nx(z,x,y))&&((x!=y)&&(y!=z)&&(x!=z))){
  12.                                         printf("x = %d, y =%d, z =%d\n",x,y,z);
  13.                                 return 1;}
  14.                                 }}
  15.         return 0;
  16. }
  17. int nx(int a,int b,int c){
  18.         int n,m;
  19.         for(n=0;n<c;n++)
  20.                 b*=b;
  21.         for(m=0;m<b;m++)
  22.                 a*=a;
  23.         return a;
  24. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-5 01:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表