| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1087 人关注过本帖
标题:来两道题
只看楼主 加入收藏
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:6 
程序代码:
        a[0]a[1] * b[0]b[1] == c[0]c[1] * d[0]d[1]d[2]
==>     a[0] * b[0] > 10 &&
        c[0] * d[0] < 10 &&
        a[0] * b[0] / 10 == c[0] * d[0] &&
        a[1] * b[1] % 10 == c[1] * d[2] % 10


[ 本帖最后由 voidx 于 2011-8-5 23:28 编辑 ]
2011-08-05 23:27
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:0 
回复 19楼 TonyDeng
把代码贴出来吧!

My life is brilliant
2011-08-05 23:28
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:0 
回复 20楼 lz1091914999
只看代码也可以
2011-08-05 23:32
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:0 
回复 23楼 voidx
我把2楼代码改了,你看看吧,跟全排列得到的是一样的结果。

My life is brilliant
2011-08-05 23:36
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:5 
回复 24楼 lz1091914999
程序代码:
// 这个全排列算法按照字典顺序依次生成下一个排列
// 要得到全排列,排列元素初始状态需按升序排列
// 优点在于可以逐个生成排列,而不是一旦运行就会生成所有排列

#include <stdio.h>

void swap(char * a, char * b) {
    char c = *a;
    *a = *b;
    *b = c;
}

char next_permutation(char s[], int l) {
    int i = 0, j = 0;
    // 找到最大的 i 值,使得 a[i] < a[i + 1]
    for (i = l - 2; i >= 0 && s[i] > s[i + 1]; i--);
    // 如果不存在这样的 i 值,则说明当前状态已经是字典顺序最后一个排列
    if (i < 0) {
        return 0;
    }
    // 找到最大的 j 值,使得 a[i] < a[j]
    for (j = l - 1; s[j] <= s[i]; j--);
    // 交换 a[i] 与 a[j]
    swap(&s[i], &s[j]);
    // 从 a[i + 1] 开始到 a[l - 1],逆序
    for (i++, j = l - 1; i < j; i++, j--) {
        swap(&s[i], &s[j]);
    }
    return 1;
}

int main(int argc, char* argv[]) {
    char s[5] = {'1', '2', '3', '4', 0};
    int l = 4;
    printf("%s\n", s);
    while (next_permutation(s, l)) {
        printf("%s\n", s);
    }
    return 0;
}


[ 本帖最后由 voidx 于 2011-8-6 00:03 编辑 ]
2011-08-06 00:01
hjywyj
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:1114
专家分:2611
注 册:2010-4-14
收藏
得分:0 
答案:
第一题:
2    3    5    7    11    101    131    151    181    191    313    353    373    383    727    757    787    797    919    929   
第二题:
46*79=23*158
54*69=27*138
54*93=27*186
58*67=29*134
58*69=23*174
58*73=29*146
58*96=32*174
63*74=18*259
64*79=32*158
73*96=12*584
76*98=14*532

顺便问一下
第二题,除了全排列算法,九层for循环,四层for循环,还有没有比较好的算法呢?
2011-08-06 06:46
韩54521风
Rank: 4
等 级:业余侠客
帖 子:75
专家分:212
注 册:2011-6-11
收藏
得分:0 
各位大侠云集,请帮小弟看一下我写的这个(第一题的),我觉得没有错,为啥只能输出2 3 5 7呢?是不是main()函数里不可以几个for循环连着用啊?
#include "stdio.h"

main()
{   int s,k,i,a,b,c,d,leap=1,h=0;

for(s=2;s<10;s++)
if(s==2||s==3||s==5||s==7)
{printf("%-4d",s);h++;
if(h%10==0)printf("\n");}

for(s=10;s<100;s++)
if(s%11==0)
{k=sqrt(s);
for(i=2;i<k;i++)
if(s%i==0)
{leap=0;break;}
if(leap)
{printf("%-4d",s);h++;
if(h%10==0)printf("\n");}
leap=1;
}

for(s=100;s<1000;s++)
{a=s/100;b=s/10%10;c=s%10;
if(a=c)
{k=sqrt(s);
for(i=2;i<k;i++)
if(s%i==0)
{leap=0;break;}
if(leap)
{printf("%-4d",s);h++;
if(h%10==0)printf("\n");}
leap=1;
}}

for(s=100;s<1000;s++)
{a=s/1000;b=s/100%10;c=s%10%100;d=s%10;
if(a==d&&b==c)
{k=sqrt(s);
for(i=2;i<k;i++)
if(s%i==0)
{leap=0;break;}
if(leap)
{printf("%-4d",s);h++;
if(h%10==0)printf("\n");}
leap=1;
}}
}

2011-08-06 08:55
hjywyj
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:1114
专家分:2611
注 册:2010-4-14
收藏
得分:0 
回复 27楼 韩54521风
int s,k,i,a,b,c,d,leap=1,h=0;

for(s=2;s<10;s++)
if(s==2||s==3||s==5||s==7)
{printf("%-4d",s);h++;
if(h%10==0)printf("\n");}

for(s=10;s<100;s++)
{if(s%11==0)
{k=(int)sqrt(s);
for(i=2;i<=k;i++)
if(s%i==0)
{leap=0;break;}
if(leap)
{printf("%-4d",s);h++;
if(h%10==0)printf("\n");}
leap=1;
}}

for(s=100;s<1000;s++)
{a=s/100;b=s/10%10;c=s%10;
if(a==c)
{k=(int)sqrt(s);
for(i=2;i<=k;i++)
if(s%i==0)
{leap=0;break;}
if(leap)
{printf("%-4d",s);h++;
if(h%10==0)printf("\n");}
leap=1;
}}

for(s=100;s<1000;s++)
{a=s/1000;b=s/100%10;c=s%10%100;d=s%10;
if(a==d&&b==c)
{k=(int)sqrt(s);
for(i=2;i<=k;i++)
if(s%i==0)
{leap=0;break;}
if(leap)
{printf("%-4d",s);h++;
if(h%10==0)printf("\n");}
leap=1;
}}
2011-08-06 09:07
韩54521风
Rank: 4
等 级:业余侠客
帖 子:75
专家分:212
注 册:2011-6-11
收藏
得分:0 
回复 27楼 韩54521风
k=(int)sqrt(s);这个和k=sqrt(s);的结果不一样吗?k=sqrt(s);的结果不也是整数吗?

这样改了以后,还是只能输出一位数的,两位至四位的都不行
2011-08-06 20:50
快速回复:来两道题
数据加载中...
 
   



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

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