首页 > 编程语言 >14 生成特定二进制数字环的程序实现:确保所有可能子序列唯一

14 生成特定二进制数字环的程序实现:确保所有可能子序列唯一

时间:2024-08-21 12:51:32浏览次数:14  
标签:gray 数字 程序实现 二进制 int prevSize 序列 14

下图是由2^3个二进制数字组成的环,由3个二进制数字构成的2^3种不同的数字序列恰好在该环中分别出现一次,例如:从箭头位置开始按顺时针方向每三个连续的二进制数字构成的序列各不相同,它们所代表的十进制数依次是:0,1,2,5,3,7,6,4.编写一个完整程序,该程序对于输入的正整数 n,生成由 2^n个二进制数字构成的环,使得从环中每个不同位置的数字开始按顺指针方向构成的长度为n的二进制数字序列各不相同。编程过程中,环的表示方式任意,程序输出结果是一个由2^n个二进制数字构成的序列,用它表示求得的环,该序列可以从环中的任何一个位置上的数字开始,例如:对应下图的输出结果(n=3时的输出结果)可以是00010111,也可以是 00101110,还可以是01011100,等等,程序输出任何一个即可。给出代码前,需要简述你的编程思路

#include <stdio.h>

#include <stdlib.h>

// Function to generate a binary array of size 2^n from a given gray code of size 2^(n-1)

void generateGrayCode(int n, int gray[1 << n]) {

         if (n == 1) {

                gray[0] = 0;

                gray[1] = 1;

        } else {

                int prevSize = 1 << (n - 1);

                int grayPrev[prevSize];

                 generateGrayCode(n - 1, grayPrev);

                 // Copy previous gray code

                for (int i = 0; i < prevSize; i++) {

                        gray[i] = grayPrev[i];

                }

                // Reflect and prefix with 1

                for (int i = prevSize - 1, j = prevSize; i >= 0; i--, j++) {

                         gray[j] = grayPrev[i] | (1 << (n - 1));

                }

        }

}

int main(int argc, char *argv[]) {

         if (argc != 2) {

                fprintf(stderr, "Usage: %s <n>\n", argv[0]);

                return 1;

        }

        int n = atoi(argv[1]);

        int gray[1 << n];

        // Array to hold the gray code generateGrayCode(n, gray);

        // Print the gray code starting from any position

        // Here we start from the beginning for simplicity

        for (int i = 0; i < (1 << n); i++) {

                 printf("%d", (gray[i] >> (n - 1)) & 1);

                // Print the least significant bit first

                for (int j = n - 2; j >= 0; j--) {

                         printf("%d", (gray[i] >> j) & 1);

                }

        }         

        printf("\n");

        return 0;

}

标签:gray,数字,程序实现,二进制,int,prevSize,序列,14
From: https://blog.csdn.net/j000405/article/details/141364379

相关文章

  • 【中项第三版】系统集成项目管理工程师 | 第 14 章 收尾过程组
    前言本章内容属于10大管理的内容。收尾过程组的知识点预计上午会考1-2分,下午案例分析也可能会进行考查。学习要以教材为主。目录14.1结束项目或阶段14.1.1主要输入14.1.2主要输出14.2收尾过程组的重要工作14.2.1项目验收14.2.2项目移交14.2.3项目总结14.3本......
  • mysql 二进制日志总结
    常用sql语句查看二进制日志文件位置SHOWVARIABLESLIKE'log_bin_basename';查看二进制日志文件的索引文件位置SHOWVARIABLESLIKE'log_bin_index';查看二进制日志文件的过期天数SHOWVARIABLESLIKE'expire_logs_days';//取值范围0-99默认0关闭列出MySQL......
  • [题解]P3311 [SDOI2014] 数数
    P3311[SDOI2014]数数看到多模式匹配,我们考虑先对所有模式串建立AC自动机。然后发现这道题和P4052文本生成器(题解)挺像的,后者让求包含至少一个模式串的个数,这道题让求一个也不包含的个数,这个就是一个用不用\(26^m\)去减的问题,很好处理。但这道题还多了一个条件,“幸运数”必须\(......
  • 信息学奥赛初赛天天练-70-NOIP2016普及组-基础题1-二进制、二进制状态表示、二进制加
    NOIP2016普及组基础题11以下不是微软公司出品的软件是()APowerpointBWordCExcelDAcrobatReader2如果256种颜色用二进制编码来表示,至少需要()位A6B7C8D93以下不属于无线通信技术的是()A蓝牙BWifiCGPRSD以太网7......
  • 914-基于64路AD的DBF波束形成硬件
    一、硬件概述      DBF技术的实现全部是在数字域实现,然而天线阵列接收的信号经过多次混频后得到的中频信号是模拟信号,实现DBF处理并充分发挥DBF技术优势的关键技术一直就是要设计高性能高速模数变换(ADC)阵列,完成模拟信号到数字信号的转换,同时需要高性能数字信号处理硬件平台实现同......
  • 3142:练23.4 首字母(C、C++、python)
    3142:练23.4 首字母信息学奥赛一本通-编程启蒙(C++版)在线评测系统C源码:#include<stdio.h>#include<stdlib.h>intmain(){ charb; scanf("%c",&b); if(b=='a'){ printf("apple"); } elseif(b=='b'){ printf("ba......
  • 二进制下载部署Nginx
    一、通过Nginx官网并采取二进制方式部署Nginx官网二、具体步骤[[email protected]]#ll-dnginx.repo-rw-r--r--.1rootroot398Aug1722:01nginx.repo[[email protected]]#pwd/etc/yum.repos.d接下来可以直接使用yum-yinstallnginx则是直......
  • Jira从4.4.5升级到6.4.14实施方案
    1、开始之前1.1、停止当前所用插件1.2、确认插件版本目前公司4.4.4版本使用了两个第三方插件。插件名称版本用途待升级版本备注issue-alternative-assignee1.6.3流程中人员选择插件1.7.81.6.3对应Jira4.4.41.7.8对应Jira6.4.14JIRASuiteUtilities......
  • 【142. 环形链表 II 中等】
    题目:给定一个链表的头节点head,返回链表开始入环的第一个节点。如果链表无环,则返回null。如果链表中有某个节点,可以通过连续跟踪next指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数pos来表示链表尾连接到链表中的位置(索引从0开始)。如......
  • 学习笔记 韩顺平 零基础30天学会Java(2024.8.14)
    P500集合体系图     单列集合是指自己只有一个值,双列集合是像键值对这样的P501Collection方法     对于第三点,像Set这样的,存放进去的和取出来的顺序可能不是一样的,所以就叫无序的P502迭代器遍历在调用iterator.next()方法之前必须要调用iterator.ha......