| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1087 人关注过本帖
标题:来两道题
只看楼主 加入收藏
hjywyj
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:1114
专家分:2611
注 册:2010-4-14
结帖率:90.91%
收藏
已结贴  问题点数:30 回复次数:28 
来两道题
1.找出1~10000中即是回文数又是素数的数

2.1-9这9个数如果满足xx*xx=xx*xxx则输出,九个数不得重复
搜索更多相关主题的帖子: 10000 
2011-08-05 18:26
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:1 
2、:
程序代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int cmp(const void * p1, const void * p2) {
    return *(int *)p1 - *(int *)p2;
}

int isRepeat(int * array, int size) {
    int i;
    qsort(array, size, sizeof(int), cmp);
    for(i = size - 1; i > 0; i--)
        if(array[i] - array[i - 1] != 1)
            return 1;
    return 0;
}

int main(void) {
    int i[9], tmp[9];
    for(i[0] = 1; i[0] < 10; i[0]++)
        for(i[1] = 1; i[1] < 10; i[1]++)
            for(i[2] = 1; i[2] < 10; i[2]++)
                for(i[3] = 1; i[3] < 10; i[3]++)
                    for(i[4] = 1; i[4] < 10; i[4]++)
                        for(i[5] = 1; i[5] < 10; i[5]++)
                            for(i[6] = 1; i[6] < 10; i[6]++)
                                for(i[7] = 1; i[7] < 10; i[7]++)
                                    for(i[8] = 1; i[8] < 10; i[8]++)
                                        if((i[0] * 10 + i[1]) * (i[2] * 10 + i[3]) == (i[4] * 10 + i[5]) * (i[6] * 100 + i[7] * 10 + i[8]) &&
                                           !isRepeat((int *)memcpy(tmp, i, sizeof(i)), 9))
                                            printf("%d%d * %d%d = %d%d * %d%d%d\n", i[0], i[1], i[2], i[3], i[4], i[5], i[6], i[7], i[8]);
    return 0;
}

修正

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


这个效率不高,全排列的效率比这个高,这就证明了,有时候递归的效率还是比迭代高的,呵呵。


[ 本帖最后由 lz1091914999 于 2011-8-5 23:20 编辑 ]

My life is brilliant
2011-08-05 21:46
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:0 
回复 2楼 lz1091914999
好暴力
2011-08-05 21:52
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:0 
回复 3楼 voidx
这应该叫做没运用数学知识的算法。

My life is brilliant
2011-08-05 21:56
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:0 
回复 4楼 lz1091914999
咦,上面那个好像不对撒,楼主的意思是不是 1 ~ 9 每个数字用且仅用一次?

另外,找到好的关于数学的书了么
2011-08-05 22:01
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:0 
回复 5楼 voidx
那得用全排列了吗?没有啊,高中数学书难找啊。。。。

My life is brilliant
2011-08-05 22:02
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:3 
回复 6楼 lz1091914999
嗯,排列比较好点吧
给你这个连接,初高中课本~

http://www.
2011-08-05 22:05
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:3 
程序代码:
#include <stdio.h>
#define swap(e1, e2, tmp) (tmp) = (e1); (e1) = (e2); (e2) = (tmp)

void perm(int *, int, int);

int main(void) {
    int numbers[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
    perm(numbers, 0, 9);
    return 0;
}

void perm(int * array, int begin, int end) {
    int i, tmp;
    if(begin == end - 1) {
        if((array[0] * 10 + array[1]) * (array[2] * 10 + array[3]) == (array[4] * 10 + array[5]) * (array[6] * 100 + array[7] * 10 + array[8]))
            printf("%d%d * %d%d = %d%d * %d%d%d\n", array[0], array[1], array[2], array[3], array[4], array[5], array[6], array[7], array[8]);
    } else {
        for(i = begin; i < end; i++) {
            swap(array[begin], array[i], tmp);
            perm(array, begin + 1, end);
            swap(array[begin], array[i], tmp);
        }
    }
}
图片附件: 游客没有浏览图片的权限,请 登录注册


[ 本帖最后由 lz1091914999 于 2011-8-5 22:10 编辑 ]

My life is brilliant
2011-08-05 22:09
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:0 
回复 7楼 voidx
谢了。

My life is brilliant
2011-08-05 22:20
韩54521风
Rank: 4
等 级:业余侠客
帖 子:75
专家分:212
注 册:2011-6-11
收藏
得分:1 
向二楼学习,八重循环
#include <stdio.h>

main()
{
    int i[8];
   
    for(i[0] = 2; i[0] < 10; i[0]++)
        for(i[1] = 2; i[1] < 10; i[1]++)
            for(i[2] = 2; i[2] < 10; i[2]++)
                for(i[3] = 2; i[3] < 10; i[3]++)
                    for(i[4] = 2; i[4] < 10; i[4]++)
                        for(i[5] = 2; i[5] < 10; i[5]++)
                            for(i[6] = 2; i[6] < 10; i[6]++)
                                for(i[7] = 2; i[7] < 10; i[7]++)
                      if((i[0] * 10 + i[1]) * (i[2] * 10 + i[3]) == (i[4] * 10 + i[5]) * (100 + i[6] * 10 + i[7])&&
                          i[0]!=i[1]&&i[0]!=i[2]&&i[0]!=i[3]&&i[0]!=i[4]&&i[0]!=i[5]&&i[0]!=i[6]&&i[0]!=i[7]&&i[1]!=i[2]
                          &&i[1]!=i[3]&&i[1]!=i[4]&&i[1]!=i[5]&&i[1]!=i[6]&&i[1]!=i[7]&&i[2]!=i[3]&&i[2]!=i[4]&&i[2]!=i[5]
                          &&i[2]!=i[6]&&i[2]!=i[7]&&i[3]!=i[4]&&i[3]!=i[5]&&i[3]!=i[6]&&i[3]!=i[7]&&i[4]!=i[5]&&i[4]!=i[6]
                          &&i[4]!=i[7]&&i[5]!=i[6]&&i[5]!=i[7]&&i[6]!=i[7])
                      printf("%d%d * %d%d = %d%d * %d%d%d\n", i[0], i[1], i[2], i[3], i[4], i[5], 1, i[6], i[7]);
   
}
这个好像少了不少啊,不值得提倡啊,既然写了,也发表了吧

[ 本帖最后由 韩54521风 于 2011-8-5 22:36 编辑 ]
2011-08-05 22:32
快速回复:来两道题
数据加载中...
 
   



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

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