| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
学习型 ASP/PHP/ASP.NET 主机 35元/年全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付
赛孚耐:软件保护加密专家身份认证令牌USB KEY虚拟主机 域名注册 主机托管 
共有 1960 人关注过本帖
标题:一个编程题目,求解题思路,不要求过程,当然有过程更好,望各位高手不吝赐教!
收藏  推荐  打印 
jiang5495
Rank: 3Rank: 3
等级:中级会员
威望:2
帖子:295
积分:2009
注册:2008-5-11
结帖率:100%
  问题点数:0  回复次数:49   
一个编程题目,求解题思路,不要求过程,当然有过程更好,望各位高手不吝赐教!

一个尾数前移问题,
如:102564
它的尾数是4;
将尾数前移得:410256;
而刚好:410256能整除102564且为4;
现在的问题是:
我们将尾数记为:p;
将尾数前移后所得数去整除原数,所得结果记为: q;(前提p能被q整除);
从键盘输入p和q;
从屏幕输出:与之对应的原数;

输入举例:
4 4
输出举例:
102564



我对这个程序是这样实现的:
# include<stdio.h>
void main()
{
long a[11],m,n,i,j,p,q,flag,flagf=0,k;
printf("Please enter two numbers 2<=q<=p<=9!\n");
scanf("%ld%ld",&p,&q);
a[1]=p;
for(a[10]=0;a[10]<=9;a[10]++)
for(a[9]=0;a[9]<=9;a[9]++)
for(a[8]=0;a[8]<=9;a[8]++)
for(a[7]=0;a[7]<=9;a[9]++)
for(a[6]=0;a[6]<=9;a[6]++)
for(a[5]=0;a[5]<=9;a[5]++)
for(a[4]=0;a[4]<=9;a[4]++)
for(a[3]=0;a[3]<=9;a[3]++)
for(a[2]=0;a[2]<=9;a[2]++)
{
for(j=10;j>=2;j--)
{
  if(a[j]!=0)
  {
  flag=j;
  break;}
  }
  m=n=0;
  while(j>=2)
  {
  for(k=1;k<=j-1;k++)
  a[j]=a[j]*10;
  n=n+a[j];
  }
  n=n+a[1];
  j=flag;
  while(j>=2)
  {
  a[j]=a[j]/10;
  m=m+a[j];}
  for(k=1;k<=flag-1;k++)
  a[1]=a[1]*10;
  m=m+a[1];
  if(m%n==0)
  if(m/n==q)
  {
  printf("%ld",n);
  flagf=1;
  break;}
  a[1]=p;
  }
   if(flagf!=1)
   printf("NOt found!\n");
   getch();
   }



下面是我的问题:
我的着个程序陷入了死循环。
但我相信这个题目肯定还有其他解法,望各位高手指教一二;
只要告诉我基本思路就可一了。
搜索更多相关主题的帖子: 思路  题目  尾数  解题  
2008-5-11 17:53
广陵绝唱
Rank: 12Rank: 12Rank: 12
等级:版主
威望:14
帖子:3008
积分:31098
注册:2008-2-15
  得分:0 


程序代码:
/**************************************************************

        利用穷举法求这道题,方法好象愚钝了些,但暂时也就
    会这种方法了。

        如有不对之处,还请大家不吝指教,谢谢。
**************************************************************/
#include<Stdio.h>
#define N 999999
float wei(float a,float b)
{
        if(b>10&&b<100)
                return a*=100;
        else if(b>99&&b<1000)
                return a*=1000;
        else if(b>999&&b<10000)
                return a*=10000;
        else
                return a*=100000;
}
int main(void)
{
        float p,q,a,b;
        printf("请输入两个整数,空格格开,enter结束输入:\n");
        scanf("%f %f",&p,&q);
        for(b=10;b<N;++b)
        {
                a=wei(p,b);
                if((a+b)/(b*10+p)==q)
                {
                        printf("这个数字为:%f\n",b*10+p);
                        break;
                }
        }
        if(b>=N)
                printf("没有您要找的数字。\n");


        getch();
}



        
2008-5-11 21:51
雨中飛燕
Rank: 4
等级:高级会员
帖子:765
积分:7750
注册:2007-10-13
  得分:0 

p和q的范围是什么?

[color=white]

C/C++讨论群:46520219 3996098 21035626 57909089
免费的C/C++算法学习论坛:http://yzfy.org
2008-5-11 23:30
广陵绝唱
Rank: 12Rank: 12Rank: 12
等级:版主
威望:14
帖子:3008
积分:31098
注册:2008-2-15
  得分:0 

以下是引用 雨中飛燕 在 2008-5-11 23:30 的发言:

p和q的范围是什么?
~~~~~~~~~~~~~`
    实在是对不起,这道题我头回见到,所以对它很不了解,所以所用的例子就是用到LZ所用的4、4,结果也是用LZ提供的。我输入5、5,6、6全不行。

    我想这题应该有很成熟的解法与算法,我的代码也算是抛砖引玉吧。
2008-5-11 23:40
hjh10845
Rank: 2
来自:火星
等级:注册会员
帖子:104
积分:1140
注册:2008-3-31
  得分:0 

for(a[10]=0;a[10]<=9;a[10]++)
for(a[9]=0;a[9]<=9;a[9]++)
for(a[8]=0;a[8]<=9;a[8]++)
for(a[7]=0;a[7]<=9;a[9]++)
for(a[6]=0;a[6]<=9;a[6]++)
for(a[5]=0;a[5]<=9;a[5]++)
for(a[4]=0;a[4]<=9;a[4]++)
for(a[3]=0;a[3]<=9;a[3]++)
for(a[2]=0;a[2]<=9;a[2]++)
*********************************
是我愚昧还是你弄错,常数也能做“++” 运算?

<接受者>? or <创造者>?
2008-5-12 00:03
广陵绝唱
Rank: 12Rank: 12Rank: 12
等级:版主
威望:14
帖子:3008
积分:31098
注册:2008-2-15
  得分:0 
回复 5# 的帖子

其实他用这么多的for本身就是错误的行为——我觉得。
2008-5-12 00:05
qinxinhai
Rank: 3Rank: 3
来自:湖南长沙
等级:中级会员
帖子:237
积分:2470
注册:2008-4-27
  得分:0 

我真服了
楼上的这些兄弟姐妹们了
我根本就看不懂了!

我秀我自己
2008-5-12 00:06
雨中飛燕
Rank: 4
等级:高级会员
帖子:765
积分:7750
注册:2007-10-13
  得分:0 

这个题不错,我暂时保留一下我的答案
其中:
5 5 的结果是:
102040816326530612244897959183673469387755
而 6 6 的结果是:
1016949152542372881355932203389830508474576271186440677966
还有 7 5 的结果是:
142857

[color=white]

C/C++讨论群:46520219 3996098 21035626 57909089
免费的C/C++算法学习论坛:http://yzfy.org
2008-5-12 00:28
雨中飛燕
Rank: 4
等级:高级会员
帖子:765
积分:7750
注册:2007-10-13
  得分:0 

其实不必一定整除亦可

[color=white]

C/C++讨论群:46520219 3996098 21035626 57909089
免费的C/C++算法学习论坛:http://yzfy.org
2008-5-12 00:30
广陵绝唱
Rank: 12Rank: 12Rank: 12
等级:版主
威望:14
帖子:3008
积分:31098
注册:2008-2-15
  得分:0 
回复 8# 的帖子

你所求的数值太大了,我目前的知识无法将它求出来。
2008-5-12 00:33
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.104537 second(s), 9 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved