| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1536 人关注过本帖
标题:(要求指针-未解决)求出所有这样的三位整数,它的2倍3倍仍然是三位整数
只看楼主 加入收藏
austral
Rank: 1
等 级:新手上路
帖 子:7
专家分:1
注 册:2011-3-30
结帖率:100%
收藏
 问题点数:0 回复次数:20 
(要求指针-未解决)求出所有这样的三位整数,它的2倍3倍仍然是三位整数

题目:
求出所有 这样的三位整数,它的 2 倍,3 倍仍 然是三位整数,
这三 个三 位 数使 用 1 到 9 之 间不 同 的数 字。 如 m=192 , 2m=384 ,
3m=576

#include<stdio.h>
int main()
{

int a[20],num[20][3],b[10]; /*a:存放满足条件的三位数*/
/*若不是10 的倍数,则分解三位数*/
/*分解该三位数中的每一个数字*/
int i,j,k,m,n,t,flag;
printf("The 3 squares with 3 different digits each are:\n");
for(j=0,i=11;i<=31;i++) /*求出是平方数的三位数*/
if(i%10!=0) /*若不是10的倍数,则分解三位数*/
{
k=i*i; /*分解该三位数中的每一个数字*/
num[j+1][0]=k/100; /*百位*/
num[j+1][1]=k/10%10; /*十位*/
num[j+1][2]=k%10; /*个位*/
if(!(num[j+1][0]==num[j+1][1]||num[j+1][0]==num[j+1][2]||
num[j+1][1]==num[j+1][2])) /*若分解的三位数字均不相等*/
a[++j]=k; /*j:计数器,统计已找到的满足要求的三位数*/
}
for(i=1;i<=j-2;++i) /*从满足条件的三位数中选出三个进行组合*/
{
b[1]=num[i][0];
b[2]=num[i][1];
b[3]=num[i][2];
for(t=i+1;t<=j-1;++t)
{
b[4]=num[t][0]; /*取第t个数的三位数字*/
b[5]=num[t][1];
b[6]=num[t][2];
for(flag=0,m=1;!flag&&m<=3;m++) /*flag:出现数字重复的标记*/
for(n=4;!flag&&n<=6;n++) /*判断两个数的数字是否有重复*/
if(b[m]==b[n])flag=1; /*flag=1:数字有重复*/
if(!flag)
for(k=t+1;k<=j;k++)
{
b[7]=num[k][0]; /*取第k个数的三位数字*/
b[8]=num[k][1];
b[9]=num[k][2];
for(flag=0,m=1;!flag&&m<=6;m++) /*判断前两个数字是否*/
for(n=7;!flag&&n<=9;n++) /*与第三个数的数字重复*/
if(b[m]==b[n])flag=1;
if(!flag) /*若均不重复则打印结果*/
printf("%d,%d,%d\n",a[i],a[t],a[k]);
}
}
}
}
  表示上面这种方法极度麻烦! 大家又什么优化的方法。求思路或者展示代码。
 

[ 本帖最后由 austral 于 2011-4-25 01:00 编辑 ]
搜索更多相关主题的帖子: different include 
2011-04-23 21:30
kwxx
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:309
专家分:913
注 册:2009-5-11
收藏
得分:0 
程序代码:
#include<stdio.h>
void main()
{
    int m,n,k,i,sum,s[10]={0};
    for(m=123;m<329;m++)    //因为各数位数字不同,而且3m<999
    {
        n=2*m; k=3*m;               
        s[m/100]=s[m%100/10]=s[m%10]=1;
        s[n/100]=s[n%100/10]=s[n%10]=1;
        s[k/100]=s[k%100/10]=s[k%10]=1;
        sum=0;
        for(i=1;i<10;i++)sum+=s[i];
        if(sum==9)printf("%5d%5d%5d\n",m,n,k);
        for(i=1;i<10;i++)s[i]=0;
    }
}
/*-----------
运行结果:
  192  384  576
  219  438  657
  273  546  819
  327  654  981
-----------*/ 
2011-04-23 23:02
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:0 
楼上理解错误

程序代码:
#include <stdio.h>

int main() {
    int i, j, k;
    char m[10] = {0};
    for (i = 1; i < 4; i++) {
        m[i] = 1;
        for (j = 1; j < 10; j++) {
            if (!m[j]) {
                m[j] = 1;
                for (k = 1; k < 10; k++) {
                    if (!m[k] && i * 100 + j * 10 < 330) {
                        printf("%d%d%d\n", i, j, k);
                    }
                }
                m[j] = 0;
            }
        }
        m[i] = 0;
    }
    return 0;
}


[ 本帖最后由 voidx 于 2011-4-24 00:12 编辑 ]
2011-04-24 00:09
Noll_Nie
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:71
专家分:139
注 册:2011-4-19
收藏
得分:0 
可以这样做吗?
很显然这个三位数是从102开始的一直到329的
当我们找到满足二倍是三位数并且三倍也是三位数
找到一个,则对这三个数做如下检查:
i用来保存此三位数的百位
j用来保存十位
k保存各位
判断i j k 是否相等
若相等,则舍去
    寻找下一个目标
若不等则返回这个三位数
    寻找下一个目标
直到找完为止
2011-04-24 00:41
hjywyj
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:1114
专家分:2611
注 册:2010-4-14
收藏
得分:0 
回复 3楼 voidx
你的程序不是楼主想要的结果哦。
2011-04-24 10:09
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:0 
回复 5楼 hjywyj
为什么不是?
2011-04-24 10:25
ansic
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:恍惚窈冥
等 级:城市猎人
帖 子:1543
专家分:5367
注 册:2011-2-15
收藏
得分:0 
100~333之间的数?

善人者,不善人之师;不善人者,善人之资。不贵其师,不爱其资,虽智大迷。
2011-04-24 10:32
hjywyj
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:1114
专家分:2611
注 册:2010-4-14
收藏
得分:0 
回复 3楼 voidx
楼主的意思是求100-1000内的数,例如:m,条件:这些数的两倍,三倍都在1000内,且m,2*m,3*m的个位,十位,百位都不能重复,例如:123,两倍是246(有2,重复了,不输出这个数)
2011-04-24 10:38
饭桶
Rank: 6Rank: 6
等 级:侠之大者
帖 子:165
专家分:422
注 册:2011-4-5
收藏
得分:0 
学习了

人得一生得奋斗!
2011-04-24 11:01
ansic
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:恍惚窈冥
等 级:城市猎人
帖 子:1543
专家分:5367
注 册:2011-2-15
收藏
得分:0 
以下是引用hjywyj在2011-4-24 10:38:38的发言:

楼主的意思是求100-1000内的数,例如:m,条件:这些数的两倍,三倍都在1000内,且m,2*m,3*m的个位,十位,百位都不能重复,例如:123,两倍是246(有2,重复了,不输出这个数)

哦~~有难度哟

善人者,不善人之师;不善人者,善人之资。不贵其师,不爱其资,虽智大迷。
2011-04-24 11:09
快速回复:(要求指针-未解决)求出所有这样的三位整数,它的2倍3倍仍然是三位整数
数据加载中...
 
   



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

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