求C好一点的朋友帮我写这一段,多谢了
定义数组a1[]={1,2,3}, tsl语句:static a1[]={1,2,3};定义输出长度可变的数组key[]; tsl语句:public key[];
删除数组元素:delete key;
显示输出结果 report_msg("key[]="key);
想要得到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}......
多谢了。 表达不是很清楚,我没弄明白,能否说清楚点
还有,是要用tsl写,还是用纯粹的c语言写出来 用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}......
这个不清楚么。。。。。不知道该怎么说了。 明白了,晚上试试看,呵呵 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 = int_to_bstr(i);
split(key, temp_arr, ",");
for(j=0; j<n; j++)
if(temp_arr == 1)
result = result & a1;
key = result;
}
}
n = 4;
key_number = key_num(n);
build_key(key_number);
for(i=0; i<key_number; i++)
report_msg(key); 非常感谢,我去试试 结果不对。。。 怎么不对?
刚才发现,最好把开头的static改成const 2
23
234
1
中间少了很多,23,21,24,213,231,241,214,243,其他也是,
1,2,3,4的全排列有64个。 有点麻烦,晚上再说,上班了咯 #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;
char * p = buf;
// placement 各位就表示各元素的出现情况
for ( int i = 0; i < N; i ++ )
{
unsigned bit = getBit(placement, i);
// 其实这里可以优化,但为了清晰,先这么写吧
// 如果此位=1,对应字符放入 buf
if ( bit )
*p++ = str;
}
*p = 0;
// 输出此结果
printf(" key[%lu]=%s\n", placement, buf);
}
}
int main(void)
{
getAllSubStr("123");
cout<<"Press any key to halt...";
getch();
return 0;
} 、这个是我的程序员做的不关我的事, 对不对,我不知道,自己试一下吧 汗。。。。我把这换成TSL还要费很大的劲 汗ing 哦,原来是这样,那你说出你想干什么吧!让大家给你出计谋吧 用tsl帮我写这一段,我是用来调用测试模块的
页:
[1]