51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 3402|回复: 16
打印 上一主题 下一主题

求C好一点的朋友帮我写这一段,多谢了

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2004-10-26 17:23:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
定义数组a1[]={1,2,3},     tsl语句:static a1[]={1,2,3};
定义输出长度可变的数组key[];          tsl语句:public key[];
删除数组元素:delete key[i];
显示输出结果   report_msg("key[]="key[i]);
想要得到key[]依次输出a1[]中元素的全排列
即:
key[]={1};key[]={2};key[]={3};key[]={4};key[]={5};
key[]={1,2}; key[]={1,3};key[]={1,4};key[]={1,5};
key[]={2,1};......
key[]={1,2,3}......

多谢了。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏

该用户从未签到

2#
发表于 2004-10-26 17:30:13 | 只看该作者
表达不是很清楚,我没弄明白,能否说清楚点
还有,是要用tsl写,还是用纯粹的c语言写出来
回复 支持 反对

使用道具 举报

该用户从未签到

3#
 楼主| 发表于 2004-10-26 17:33:16 | 只看该作者
用tsl写,
想要得到key[]依次输出a1[]中元素的全排列
即:
key[]={1};key[]={2};key[]={3};key[]={4};key[]={5};
key[]={1,2}; key[]={1,3};key[]={1,4};key[]={1,5};
key[]={2,1};......
key[]={1,2,3}......

这个不清楚么。。。。。不知道该怎么说了。
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2004-10-26 17:36:09 | 只看该作者
明白了,晚上试试看,呵呵
回复 支持 反对

使用道具 举报

该用户从未签到

5#
发表于 2004-10-27 13:16:15 | 只看该作者
static a1[] = {1, 2, 3, 4};
public key[];
static n;

public function key_num(in n)
{
        auto result, i;
        result = 1;
        for(i=1; i<=n; i++)
                result = result * 2;
        return result;
}

public function int_to_bstr(in num)
{
        auto result, i;
        result = "";
        i = num;
        while(i != 0){
                if((i % 2) == 0)
                        result = ",0" & result;
                else
                        result = ",1" & result;
                i = int(i / 2);
        }
        while(length(result) != 2 * n)
                result = ",0" & result;
        result = substr(result, 2, length(result) - 1);
        return result;
}

public function build_key(in key_num)
{
        auto i, j, temp_arr[], result;
        for(i=0; i<key_num; i++)
        {
                result = "";
                key[i] = int_to_bstr(i);
                split(key[i], temp_arr, ",");
                for(j=0; j<n; j++)
                        if(temp_arr[j + 1] == 1)
                                result = result & a1[j];
                key[i] = result;
        }
}

n = 4;
key_number = key_num(n);
build_key(key_number);
for(i=0; i<key_number; i++)
        report_msg(key[i]);
回复 支持 反对

使用道具 举报

该用户从未签到

6#
 楼主| 发表于 2004-10-27 13:17:59 | 只看该作者
非常感谢,我去试试
回复 支持 反对

使用道具 举报

该用户从未签到

7#
 楼主| 发表于 2004-10-27 13:21:15 | 只看该作者
结果不对。。。
回复 支持 反对

使用道具 举报

该用户从未签到

8#
发表于 2004-10-27 13:35:49 | 只看该作者
怎么不对?
刚才发现,最好把开头的static改成const
回复 支持 反对

使用道具 举报

该用户从未签到

9#
 楼主| 发表于 2004-10-27 13:38:34 | 只看该作者
2
23
234
1
中间少了很多,23,21,24,213,231,241,214,243,其他也是,
1,2,3,4的全排列有64个。
回复 支持 反对

使用道具 举报

该用户从未签到

10#
发表于 2004-10-27 13:46:49 | 只看该作者
有点麻烦,晚上再说,上班了咯
回复 支持 反对

使用道具 举报

该用户从未签到

11#
发表于 2004-10-27 18:18:16 | 只看该作者
#include <assert.h>
#include <string.h>
#include <stdio.h>
#include <iostream.h>
#include <stdlib.h>
#include <conio.h>

typedef unsigned long HUGEINT;//对64位系统定义 unsigned __int64

inline unsigned getBit(HUGEINT d, int i)
{
return (d >> i) & 1;
}

void getAllSubStr(const char str[])
{
        int N = strlen(str);
        assert( N < 32 );// 因为采用32位整数,为简化问题,最多处理31个元素

        // 计算 ResultCount = 2^N - 2
        HUGEINT ResultCount = (1ul << N) - 2ul;

        // 所有的整数 1..ResultCount-1 对应所有的排列
        printf("\nresults of %s:\n", str);
        for ( HUGEINT placement = 1; placement <= ResultCount; placement++ )
        {
                char buf[32];
                char * p = buf;
                // placement 各位就表示各元素的出现情况
                for ( int i = 0; i < N; i ++ )
                {
                        unsigned bit = getBit(placement, i);
                        // 其实这里可以优化,但为了清晰,先这么写吧
                        // 如果此位=1,对应字符放入 buf
                        if ( bit )
                        *p++ = str[i];
                }
                *p = 0;
                // 输出此结果
                printf("    key[%lu]=%s\n", placement, buf);
               
        }
}

int main(void)
{
    getAllSubStr("123");
        cout<<"Press any key to halt...";
    getch();
return 0;
}
回复 支持 反对

使用道具 举报

该用户从未签到

12#
发表于 2004-10-27 18:19:20 | 只看该作者
、这个是我的程序员做的不关我的事,
回复 支持 反对

使用道具 举报

该用户从未签到

13#
发表于 2004-10-27 18:20:17 | 只看该作者
对不对,我不知道,自己试一下吧
回复 支持 反对

使用道具 举报

该用户从未签到

14#
 楼主| 发表于 2004-10-27 18:48:45 | 只看该作者
汗。。。。我把这换成TSL还要费很大的劲
回复 支持 反对

使用道具 举报

该用户从未签到

15#
发表于 2004-10-27 19:19:43 | 只看该作者
汗ing
回复 支持 反对

使用道具 举报

该用户从未签到

16#
发表于 2004-10-27 20:35:52 | 只看该作者
哦,原来是这样,那你说出你想干什么吧!让大家给你出计谋吧
回复 支持 反对

使用道具 举报

该用户从未签到

17#
 楼主| 发表于 2004-10-27 20:56:18 | 只看该作者
用tsl帮我写这一段,我是用来调用测试模块的
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-26 23:37 , Processed in 0.074162 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表