《编程思维与实践》1039.字符组合

news2024/9/21 16:44:39

《编程思维与实践》1039.字符组合

题目

在这里插入图片描述
在这里插入图片描述

思路

先将字符串去重+排序(保证每个组合中的字符按字典序),然后枚举出所有组合的情形,最后再进行字典序排序即可.

其中字符串的去重排序可以利用ASCII码值进行桶排序,关键在于如何枚举所有组合的情形.

每个位置有两种可能(选或不选),但至少要选一个,所以一共有 2 n − 1 2^{n}-1 2n1种(减去都不选的情况)可能性.

不妨将选记为1,不选记为0,那么这就刚好与二进制是对应的:

以abc的所有组合为例,

000表示abc都不选 , 001对应c , 010对应b , 011对应bc , 100对应a , 101对应ac , 110对应ab , 111对应abc.

代码

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int cmp(const void* a,const void* b)   //字典序排序
{
	char* m=(char*)a;
	char* n=(char*)b;
	return strcmp(m,n);
} 

int main()
{
	int T;
	scanf("%d",&T);
	for(int i=0;i<T;i++)
	{
		char s[17];  //长度不超过16
		scanf("%s",s);
		char differ[17]={'\0'};   //桶
        int count=0;
		for(int j=0;j<strlen(s);j++)
		{
			if(strchr(differ,s[j])==NULL)
            {
                differ[count++]=s[j];
            }
		}
        differ[count]='\0';
        qsort(differ,count,sizeof(char),cmp);
		
        int temp=(1<<count)-1;   //所有组合结果数
        char result[temp][17];   //所有组合情形
		int possible[count];   //二进制枚举  
        memset(possible,0,sizeof(possible));
		for(int j=0;j<temp;j++)   //每位依此加1
		{
			possible[0]++;
            for(int k=0;k<count-1;k++)
            {
                if(possible[k]==2)  //进位
                {
                    possible[k]=0;
                    possible[k+1]++;
                }
            }
			int t=0;
			for(int k=0;k<count;k++)  
			{
				if(possible[k])
				{
					result[j][t++]=differ[k];
				}
			}
			result[j][t]='\0';
		}
		
		qsort(result,temp,sizeof(result[0]),cmp); //排序
		printf("case #%d:\n",i);
		for(int j=0;j<temp;j++)
		{
			printf("%s\n",result[j]);
		}
	}
	return 0; 
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/467394.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MongoDB 聚合管道的输出结果到集合($out)及合并结果到集合($merge)

上一篇文章&#xff0c;我们介绍了使用聚合管道完成文档之间的关联查询、以及如果将两个管道中的文档进行合并&#xff0c;如果需要进一步了解可以参考&#xff1a;MongoDB 聚合管道的文档关联查询($lookup)及管道合并($unionWith)https://blog.csdn.net/m1729339749/article/d…

ES索引管理

ES官方博客&#xff1a;https://elasticstack.blog.csdn.net/?typeblog 一、rolloverAPI https://elasticstack.blog.csdn.net/article/details/102728987 1.1 rollover命令 POST /log_alias/_rollover { "conditions":{ "max_age":"…

Node 09 MongoDB的使用

MongoDB 简介 Mongodb 是什么 MongoDB 是一个基于分布式文件存储的数据库&#xff0c;官方地址 https://www.mongodb.com/ 数据库是什么 数据库&#xff08;DataBase&#xff09;是按照数据结构来组织、存储和管理数据的 应用程序 数据库的作用 数据库的主要作用就是 管理…

jsp家庭农场投入品信息管理系统Myeclipse开发mysql数据库web结构jsp编程计算机网页项目

一、源码特点 jsp家庭农场投入品信息管理系统是一套完善的java web信息管理系统 serlvet dao bean 开发&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发…

如何理解PCB布线3W规则

我们平时在PCB布线的时候&#xff0c;对于比较重要的信号都要做特殊处理&#xff0c;比如包地或者时“3W”&#xff0c;所谓3w指的是线与线之间的间距要满足三倍的线宽&#xff0c;那么我们怎么理解这个3W原则呢&#xff0c;他是如何降低信号之间的串扰的呢&#xff1f; 我们要…

连网介质及设备详解

文章目录 一、网卡1. 有线网卡2. 无线网卡3. 光纤网卡 二、网线1. 双绞线2. 光缆 三、交换机1. 什么是交换机2. 交换机分类 一、网卡 网卡分为三类&#xff1a;有线网卡、无线网卡、光纤网卡 1. 有线网卡 多数台式计算机自带&#xff0c;采用 RJ-45 制式接口 通过双绞线传输…

Hive2安装Tez计算引擎

一、Tez介绍 ApacheTEZ项目旨在构建一个应用程序框架&#xff0c;该框架允许使用复杂的有向无环图来处理数据。 它当前构建在Apache Hadoop YARN之上。 Tez的2个主要设计主题是&#xff1a; 通过以下方式增强最终用户的能力&#xff1a; 富有表现力的数据流定义API 灵活的输入…

ICV:车载毫米波雷达中国市场有望在2025年实现30亿美元的市场规模

近日&#xff0c;专注于前沿科技领域的国际咨询机构ICV发布了全球车载毫米波雷达的市场研究报告&#xff0c;汽车毫米波&#xff08;mmWave&#xff09;雷达基于频率为77 GHz的电磁波&#xff0c;具有高精度和准确性&#xff0c;可用于目标检测。这种技术有着广泛的应用&#x…

Dubbo面试大全

Dubbo面试题 1.Dubbo 是什么&#xff1f; Dubbo是阿里巴巴开源的分布式&#xff0c;高性能的透明化的RPC服务框架&#xff0c;提供服务自动注册&#xff0c;自动发现等高效服务治理方案&#xff0c;可以和Spring框架可以无缝衔接。 2.Dubbo的由来 你们的项目为什么会使用Du…

论文阅读 关联规则挖掘综述

这是一篇关联规则挖掘的综述&#xff0c;也记录下自己的心得笔记 A comprehensive review of visualization methods for association rule mining: Taxonomy, Challenges, Open problems and Future ideas 文章目录 摘要1、介绍2、关联规则挖掘是个小东西2.1、数值关联规则挖…

AGI智能新时代,技术驱动营销数字化重组|数说故事D3峰会盛况

万物向新&#xff0c;数字重组。 3月29日&#xff0c;以「REMIX——重组数字未来&#xff0c;创享无限可能」为主题的数说故事第六届D3智能营销峰会在广州白云国际会议中心圆满举办。本届峰会由数说故事携手GDMS联合主办&#xff0c;数说故事作为专场合作伙伴&#xff0c;与50…

php通过cURL爬取数据的方法(ajax接口、cookie伪造爬取、文件头信息)

php通过curl爬取数据 一、请求流程1.CURL请求步骤2.使用CURL发送GET请求3.使用CURL发送POST请求 二、实战&#xff1a;curl通过ajax接口API爬取数据1.接口分析2.抓取分析3.构建curl4.结果呈现 三、实战&#xff1a;curl添加cookie伪造登陆爬取数据1.注册用户&#xff0c;并记录…

【老王读SpringMVC-4】请求参数是如何绑定到Controller method参数对象上的?

前面我们分析了&#xff0c;如果我们自己要实现 spring mvc 框架的话&#xff0c;大致需要实现如下功能&#xff1a; 0、将 url 与 Controller method 的对应关系进行注册1、通过请求的 url 找到 Controller method (即 url 与 Controller method 的映射)2、将请求参数进行绑定…

FPGA时序约束(四)主时钟和虚拟时钟的约束

系列文章目录 FPGA时序约束&#xff08;一&#xff09;基本概念入门及简单语法 FPGA时序约束&#xff08;二&#xff09;利用Quartus18对Altera进行时序约束 FPGA时序约束&#xff08;三&#xff09;时序约束基本路径的深入分析 文章目录 系列文章目录前言主时钟约束跨时钟域…

计算机网络【2】 子网掩码

学习大佬记下的笔记 https://zhuanlan.zhihu.com/p/163119376 "子网"掩码&#xff0c;顾名思义&#xff0c;它就是拿来划分子网的&#xff0c;更准确的说&#xff0c;划分子网的同时&#xff0c;还能通过它知道主机在子网里面的具体ip的具体地址。 子网掩码只有一个…

聊聊「低代码」的实践之路

区块链、低代码、元宇宙、AI智能&#xff1b; 01 【先来说说背景】 这个概念由来已久&#xff0c;但是在国内兴起&#xff0c;是最近几年&#xff1b; 低代码即「Low-Code」&#xff1b; 指提供可视化开发环境&#xff0c;可以用来创建和管理软件应用&#xff1b; 简单的说…

中英文切换,vue项目国际化使用教程(国际化使用详细,i18n国际化)

简述&#xff1a;在工作中&#xff0c;我们难免会遇到把文字切换成外语的需求&#xff0c;这里来记录下如何在项目中点击切换成英语&#xff0c;这里会用到i18n&#xff0c;它是一个支持国际化功能的插件&#xff0c;这里来分享下它的使用过程。 1、首先&#xff0c;我们需要在…

idea使用 ( 四 ) 插件

5.插件 5.1.idea数据库连接 5.1.1.打开配置界面 5.1.2.选择MySQL 点击 号 > Data Source > MySQL 5.1.3.配置数据库驱动jar 先在左边选择 MySQL 再点击 号 > Custom JARs… 在 弹出的窗口中选择 已经存在的 jar位置 就导入 MySQL 的驱动文件 5.1.4.配置连库…

记录一次在x86 软件中使用dpdk 的历程(Makefile gcc改成g++)

我们一台服务器上原本是用grub下预留内存的方式, 然后把物理地址在板卡上的配置文件中传给L1. 但是在客户的环境上服务器windriver上不是能预留内存的. 所以服务器上需要在testMxx程序中用dpdk的方式分配出内存, 然后, 把物理地址通过sdp虚拟的网口&#xff0c; 用socket 传…

为什么要清除浮动?清除浮动的方式

&#x1f4dd;个人主页&#xff1a;爱吃炫迈 &#x1f48c;系列专栏&#xff1a;HTMLCSS &#x1f9d1;‍&#x1f4bb;座右铭&#xff1a;道阻且长&#xff0c;行则将至&#x1f497; 文章目录 浮动的定义浮动的工作原理浮动的特性为什么要清除浮动清除浮动的方式利用clear样式…