求帮忙设计一个算法

predator_leo 2014-06-05 12:34:17
问题是这样的:
当n=3时,表示有3个元素,其中第1,2个元素为基本元素,可标记为a,b,那么第3个元素为ab
当n=7时,表示有7个元素,其中第1,2,4个元素为基本元素,标记为a,b,c,那么,第3个元素为ab,第5~7个元素依次为ac,bc,abc;
当n=15时,基本元素为第1,2,4,8个元素,标记为a,b,c,d,第3个元素为ab,第5~7个元素为ac,bc,abc,第8个元素为d,第9~15个元素依次为:ad,bd,abd,cd,acd,bcd,abcd.

能不能设计一个程序,当n不同时,把相应的元素列表生成出来。
...全文
124 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
lm_whales 2014-06-05
  • 打赏
  • 举报
回复
二进制表示,位权1,2,4,8 是2^n ,n 是字母表中的字符序号,从0开始 用位运算,可以用与 和移位 (&,>>) 不用位运算,直接用除法 ,求余数 (%) 和 求商 (/)
赵4老师 2014-06-05
  • 打赏
  • 举报
回复
赵4出品,必属精品!
predator_leo 2014-06-05
  • 打赏
  • 举报
回复
引用 3 楼 zhao4zhong1 的回复:
难者不会,会者不难。
//当n=3时,表示有3个元素,其中第1,2个元素为基本元素,可标记为a,b,那么第3个元素为ab
//当n=7时,表示有7个元素,其中第1,2,4个元素为基本元素,标记为a,b,c,那么,第3个元素为ab,第5~7个元素依次为ac,bc,abc;
//当n=15时,基本元素为第1,2,4,8个元素,标记为a,b,c,d,第3个元素为ab,第5~7个元素为ac,bc,abc,第8个元素为d,第9~15个元素依次为:ad,bd,abd,cd,acd,bcd,abcd.
//能不能设计一个程序,当n不同时,把相应的元素列表生成出来。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXN 255
int i,n,v,L,j;
char b[17];
void out(int v) {
    ltoa(v,b,2);
    L=strlen(b);
    for (j=0;j<L;j++) if (b[L-1-j]=='1') printf("%c",'a'+j);
    printf(",");
}
int main() {
    while (1) {
        while (1) {
            printf("\nInput n(1..65535,0 to exit):");
            fflush(stdout);
            rewind(stdin);
            if (1==scanf("%d",&n)) {
                if (1<=n && n<=65535) break;
                if (0==n) return 0;
            }
        }
        for (i=1;i<=n;i++) out(i);
    }
    return 0;
}
//
//Input n(1..65535,0 to exit):1
//a,
//Input n(1..65535,0 to exit):2
//a,b,
//Input n(1..65535,0 to exit):3
//a,b,ab,
//Input n(1..65535,0 to exit):4
//a,b,ab,c,
//Input n(1..65535,0 to exit):7
//a,b,ab,c,ac,bc,abc,
//Input n(1..65535,0 to exit):15
//a,b,ab,c,ac,bc,abc,d,ad,bd,abd,cd,acd,bcd,abcd,
//Input n(1..65535,0 to exit):23
//a,b,ab,c,ac,bc,abc,d,ad,bd,abd,cd,acd,bcd,abcd,e,ae,be,abe,ce,ace,bce,abce,
//Input n(1..65535,0 to exit):0
//
非常感谢赵老师! 摸摸大
赵4老师 2014-06-05
  • 打赏
  • 举报
回复
难者不会,会者不难。
//当n=3时,表示有3个元素,其中第1,2个元素为基本元素,可标记为a,b,那么第3个元素为ab
//当n=7时,表示有7个元素,其中第1,2,4个元素为基本元素,标记为a,b,c,那么,第3个元素为ab,第5~7个元素依次为ac,bc,abc;
//当n=15时,基本元素为第1,2,4,8个元素,标记为a,b,c,d,第3个元素为ab,第5~7个元素为ac,bc,abc,第8个元素为d,第9~15个元素依次为:ad,bd,abd,cd,acd,bcd,abcd.
//能不能设计一个程序,当n不同时,把相应的元素列表生成出来。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXN 255
int i,n,v,L,j;
char b[17];
void out(int v) {
    ltoa(v,b,2);
    L=strlen(b);
    for (j=0;j<L;j++) if (b[L-1-j]=='1') printf("%c",'a'+j);
    printf(",");
}
int main() {
    while (1) {
        while (1) {
            printf("\nInput n(1..65535,0 to exit):");
            fflush(stdout);
            rewind(stdin);
            if (1==scanf("%d",&n)) {
                if (1<=n && n<=65535) break;
                if (0==n) return 0;
            }
        }
        for (i=1;i<=n;i++) out(i);
    }
    return 0;
}
//
//Input n(1..65535,0 to exit):1
//a,
//Input n(1..65535,0 to exit):2
//a,b,
//Input n(1..65535,0 to exit):3
//a,b,ab,
//Input n(1..65535,0 to exit):4
//a,b,ab,c,
//Input n(1..65535,0 to exit):7
//a,b,ab,c,ac,bc,abc,
//Input n(1..65535,0 to exit):15
//a,b,ab,c,ac,bc,abc,d,ad,bd,abd,cd,acd,bcd,abcd,
//Input n(1..65535,0 to exit):23
//a,b,ab,c,ac,bc,abc,d,ad,bd,abd,cd,acd,bcd,abcd,e,ae,be,abe,ce,ace,bce,abce,
//Input n(1..65535,0 to exit):0
//
predator_leo 2014-06-05
  • 打赏
  • 举报
回复
引用 1 楼 lm_whales 的回复:
二进制表示,位权1,2,4,8 是2^n ,n 是字母表中的字符序号,从0开始 用位运算,可以用与 和移位 (&,>>) 不用位运算,直接用除法 ,求余数 (%) 和 求商 (/)
能说详细点吗? 实际情况是,我的每个元素都是向量,ab对应的关系是两个向量相加。

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧