免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: 漠北病树
打印 上一主题 下一主题

一个涉及到算法的问题,怎么解决? [复制链接]

论坛徽章:
0
11 [报告]
发表于 2014-12-04 16:34 |只看该作者
回复 10# huangxiaohen
上面的只是举例子。用户输入的列表没有限制的,里面的元素数量也没有限制的。


   

论坛徽章:
0
12 [报告]
发表于 2014-12-04 18:04 |只看该作者
不管里面有多少,难道遍历不出来了么?回复 11# 漠北病树


   

论坛徽章:
46
2015小元宵徽章
日期:2015-03-06 15:58:18羊年新春福章
日期:2015-04-14 10:37:422015年亚洲杯之阿曼
日期:2015-04-14 10:41:50NBA常规赛纪念章
日期:2015-05-04 22:32:03NBA季后赛大富翁
日期:2015-05-04 22:34:11菠菜明灯
日期:2015-05-04 22:35:49新奥尔良黄蜂
日期:2015-05-04 22:49:2315-16赛季CBA联赛之广夏
日期:2015-12-11 15:02:342015年亚洲杯之巴勒斯坦
日期:2015-03-04 19:56:562015年亚洲杯之阿联酋
日期:2015-03-04 11:19:04休斯顿火箭
日期:2015-03-02 16:32:11纽约尼克斯
日期:2015-03-02 16:09:04
13 [报告]
发表于 2014-12-04 21:58 |只看该作者
回复 7# 漠北病树
周六上代码,用C语言递归实现


   

论坛徽章:
13
CU大牛徽章
日期:2013-04-17 11:20:3615-16赛季CBA联赛之吉林
日期:2017-05-25 16:45:4715-16赛季CBA联赛之福建
日期:2017-03-13 11:33:442017金鸡报晓
日期:2017-02-08 10:39:422017金鸡报晓
日期:2017-01-10 15:13:29IT运维版块每日发帖之星
日期:2016-03-15 06:20:01IT运维版块每日发帖之星
日期:2015-10-02 06:20:00CU十二周年纪念徽章
日期:2013-10-24 15:41:34CU大牛徽章
日期:2013-09-18 15:15:45CU大牛徽章
日期:2013-09-18 15:15:15CU大牛徽章
日期:2013-04-17 11:46:39CU大牛徽章
日期:2013-04-17 11:46:28
14 [报告]
发表于 2014-12-05 06:31 |只看该作者
本帖最后由 xdsnet 于 2014-12-05 06:32 编辑

这个的关键在数据的构造和模块的处理。
比如不知道有多少行数据输入,也不知道每行多少数据。
假设数据由命令行输入,不知道有多少行,以EOF结尾,每行数据由空格分开

  1. import itertools
  2. import sys
  3. lines=sys.stdin.readlines()
  4. n=len(lines)
  5. ar=[]
  6. for i in range(n):
  7.     tmp=lines[i]).split()
  8.     ar+=[tmp]

  9. for r in itertools.product(*ar):
  10.         print ' '.join(r)

复制代码

论坛徽章:
46
2015小元宵徽章
日期:2015-03-06 15:58:18羊年新春福章
日期:2015-04-14 10:37:422015年亚洲杯之阿曼
日期:2015-04-14 10:41:50NBA常规赛纪念章
日期:2015-05-04 22:32:03NBA季后赛大富翁
日期:2015-05-04 22:34:11菠菜明灯
日期:2015-05-04 22:35:49新奥尔良黄蜂
日期:2015-05-04 22:49:2315-16赛季CBA联赛之广夏
日期:2015-12-11 15:02:342015年亚洲杯之巴勒斯坦
日期:2015-03-04 19:56:562015年亚洲杯之阿联酋
日期:2015-03-04 11:19:04休斯顿火箭
日期:2015-03-02 16:32:11纽约尼克斯
日期:2015-03-02 16:09:04
15 [报告]
发表于 2014-12-05 09:51 |只看该作者
回复 7# 漠北病树
不支持输入异常参数的处理,整个代码有点类似字符串的滚动,滚动一圈之后说明结束,和坦克的轮子类似。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void push(char *s, char c)
{
        int len = strlen(s);
        s[len] = c;
        s[len+1] = '\0';
}
void pop(char *s)
{
        int len = strlen(s);
        s[len - 1] = '\0';
}
void roll(char *s)
{
        char *start, *end;
        char c,tmp;
        c = *s;
        start = s;
        end = strstr(s, "]");

        while(start + 1 < end){
                *start = *(start + 2);
                start += 2;
        }
        *(end-1) = c;
}
void wheel(char *s, char *text)
{
        char *str;
        char c;
        str = (char *)malloc(strlen(s) + 1);
        strcpy(str, s);
        do{
                c = *str;
                if(strstr(str, "[") != NULL){
                        push(text, c);
                        push(text, ',');
                        wheel((strstr(str,"[") + 1), text);
                        pop(text);
                        pop(text);
                }else{
                        printf("%s", text);
                        printf("%c]\n", c);   /*last sector,need print*/       
                }
                roll(str);
        }while(strcmp(str, s) != 0);
        free(str);
}

int main(int argc, char **argv)
{
        int len = strlen(argv[1]) + 1;
        char *s = malloc(len);
        char buf[100];/*这里不判断维度了,简化处理一下,如果想要判断维度的话,找一下argv[1]中有多少个[就行了,100的buf大概能支持维度为40多的*/
        memset(buf, 0, sizeof(buf));
        buf[0] = '[';

        wheel(argv[1] + 1, buf);
        return 0;
}


   

论坛徽章:
46
2015小元宵徽章
日期:2015-03-06 15:58:18羊年新春福章
日期:2015-04-14 10:37:422015年亚洲杯之阿曼
日期:2015-04-14 10:41:50NBA常规赛纪念章
日期:2015-05-04 22:32:03NBA季后赛大富翁
日期:2015-05-04 22:34:11菠菜明灯
日期:2015-05-04 22:35:49新奥尔良黄蜂
日期:2015-05-04 22:49:2315-16赛季CBA联赛之广夏
日期:2015-12-11 15:02:342015年亚洲杯之巴勒斯坦
日期:2015-03-04 19:56:562015年亚洲杯之阿联酋
日期:2015-03-04 11:19:04休斯顿火箭
日期:2015-03-02 16:32:11纽约尼克斯
日期:2015-03-02 16:09:04
16 [报告]
发表于 2014-12-05 10:46 |只看该作者
程序有Bug,不支持同一[]中有相同的元素

论坛徽章:
0
17 [报告]
发表于 2014-12-08 14:11 |只看该作者
回复 16# super皮波

python实现,代码如下:
import sys

def gen_Ips(iplist):
    num = len(iplist)
    tmp = []
    i = 0
    while i < num -1:
        if tmp != []:
            tmp1 = tmp
            tmp = []
            for var in tmp1:
                for var2 in iplist[i+1]:
                    tmp.append(str(var) + '.' + str(var2))
        else:
            for var in iplist:
                for var2 in iplist[i+1]:
                    tmp.append(str(var) + '.' + str(var2))
        i = i+1
    return tmp

print gen_Ips(sys.argv[1])

   

论坛徽章:
26
2015亚冠之胡齐斯坦钢铁
日期:2015-06-25 21:40:202015亚冠之柏斯波利斯
日期:2015-08-31 17:03:192015亚冠之柏斯波利斯
日期:2015-11-07 13:10:00程序设计版块每日发帖之星
日期:2015-11-10 06:20:00每日论坛发贴之星
日期:2015-11-10 06:20:00程序设计版块每日发帖之星
日期:2015-11-26 06:20:00程序设计版块每日发帖之星
日期:2015-12-02 06:20:00黄金圣斗士
日期:2015-12-07 17:57:4615-16赛季CBA联赛之天津
日期:2015-12-23 18:34:14程序设计版块每日发帖之星
日期:2016-01-02 06:20:00程序设计版块每日发帖之星
日期:2016-01-06 06:20:00每日论坛发贴之星
日期:2016-01-06 06:20:00
18 [报告]
发表于 2015-05-24 18:07 |只看该作者
回复 1# 漠北病树

用户输入字符不加引号
# 比如用户输入:

'  [s, d,j], [1, 2,3], [ x, y],[  A, B,C  ] '

输出下面结果:
s 1 x A
s 1 x B
s 1 x C
s 1 y A
s 1 y B
s 1 y C
s 2 x A
s 2 x B
s 2 x C
s 2 y A
s 2 y B
s 2 y C
s 3 x A
s 3 x B
...
等等 。
  1. #!/usr/bin/python2
  2. # -*- coding: utf-8 -*-
  3. # 用户输入字符不加引号
  4. # 比如用户输入:

  5. USR = '  [s, d,j], [1, 2,3], [ x, y],[  A, B,C  ] '
  6. # USR = raw_input('input:\n')


  7. def Make(STR):
  8.     STR = STR.replace(' ', '')[1:-1]
  9.     LST = [i.split(',') for i in STR.split('],[')]
  10.     RES = [[]]
  11.     for i in LST:
  12.         RES = [r + [j] for r in RES for j in i]
  13.     return RES


  14. for i in Make(USR): print ' '.join(i)
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP