【竞赛题目】木块(C语言详解)

这篇具有很好参考价值的文章主要介绍了【竞赛题目】木块(C语言详解)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【竞赛题目】木块(C语言详解),c语言,开发语言

" 木块 "【第二届全国高校计算机技能竞赛】里的一道竞赛题目,博主觉得很新颖想推荐给大家;

题目描述

为了提高词汇量,小理得到了一套四块木块,其中每块都是一个立方体六面各写着一个字母。他正在通过将木块排成一排使得木块顶部的字母拼出单词来学习拼写。

给定小理的四个木块上的字母,以及他想拼写的单词列表,请确定列表中哪些单词可被他使用木块成功拼写

输入

输入共 N+5 行。

输入的第一行包含 N,为小理想要拼写的单词数。

接下来的 四行 每行包含一个带有六个大写字母的字符串,表示小理的一个块的六个侧面上的字母。

接下来的 行包含小理想要拼写的 N 个单词。其中每一个的长度在 1 到 4 个大写字母之间。

输出

对于小理列表中的每个单词,如果他能够使用木块拼写,则输出 YES ,否则输出 NO

样式输入:

6
MOOOOO
OOOOOO
ABCDEF
UVWXYZ
COW
MOO
ZOO
MOVE
CODE
FARM

样式输出:

YES
NO
YES
YES
NO
NO

提示:

对于 100% 的数据,保证 1 <= N <= 10

在本例中,小理可以拼写 "COW"、"ZOO"和"MOVE"。不幸的是,他不能拼写 "MOO",因为唯一带有字母 "M" 的木块也不能用于 "MOO"。他不能拼写 "FARM",因为没有字母 " R " 的木块。他不能拼写 "CODE",因为 "C""E""D"都属于同一个木块。

题目就是这样,刚看完的小伙伴会有点绕,题目的意思呢就是让 我们写单词让四个有六个面的木块
组,然后在判断能不能组成功就OK了

思路解析:

我们有 四个木块每块有六个字母,我们写 n 单词判断能不能用木块组成功;
我们可以先将单词存再一个数组里面,然后让木块去消灭它,这听起来有点抽象;
首先 单词并不好存,但是我们可以把 字母化成数字去进行存储,存储成功就让数组内的值 ++ ,然 后让木块去消灭,木块里的单词对应数组里的值让其 - - ,最后在 判断数组里的值看看有没有消灭干净

思路实现:

int main()
{
	int n = 0;
	scanf("%d", &n);  //要写的单词个数
	char block[4][7] = { 0 };
	int i = 0;
	for (i = 0; i < 4; i++)
	{
		scanf("%s", &block[i]);  //输入木块
	}
	char word[10][5] = { 0 };
	for (i = 0; i < n; i++)
	{
		scanf("%s", &word[i]);	  //输入单词
	}

	printf("\n");
	for (i = 0; i < n; i++)
	{
		if (search(block, word[i]))  //检索
		{
			printf("YES\n");
		}
		else
		{
			printf("NO\n");
		}
	}
	return 0;
}

这是主函数框架,我们先给木块,单词赋值,然后再加以判断,如果函数返回 非0 就打印 YES ,反之打印 NO;

然后我们要实现 检索函数 search;
int search(char block[4][7], char word[5])
{
	int count[26] = { 0 };
	int i = 0;
	int len = strlen(word);
	for (i = 0; i < len; i++)
	{
		count[word[i] - 'A']++;  //存进单词
	}
	int j = 0;
	for (i = 0; i < 4; i++)
	{
		for (j = 0; j < 6; j++)
		{
			count[block[i][j] - 'A']--;   //消灭单词--每行只能消灭一个
			if (count[block[i][j] - 'A'] >= 0)
			{
				break;
			}
		}
	}

	for (i = 0; i < 26; i++)  //遍历数组看看有没有消灭干净
	{
		if (count[i] > 0)
		{
			return 0;
		}
	}
	return 1;
}

我们定义 count 数组来表示存储单词,我们将字母减去 ' A ',即可变为相应的数字,我们先将字母存进去,将对应的下标对应的值 ++,然后再让木块去数组里面消灭每个木块最多只能消灭一个(因为是四个木块组成单词,所以一个木块只能提供一个单词),让木块里的字母对应的下标里的值 — —,然后再检查 count 数组里的值,如果出现大于0的值就说明没消灭干净也就是木块组成不了返回 0 ,反之返回 1

我们用用例试一下:
【竞赛题目】木块(C语言详解),c语言,开发语言
可以看到也是没有任何问题的;
这个题目我觉得挺新颖的,大家可以看一下,学习一下;

源代码:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>

int search(char block[4][7], char word[5])
{
	int count[26] = { 0 };
	int i = 0;
	int len = strlen(word);
	for (i = 0; i < len; i++)
	{
		count[word[i] - 'A']++;  //存进单词
	}
	int j = 0;
	for (i = 0; i < 4; i++)
	{
		for (j = 0; j < 6; j++)
		{
			count[block[i][j] - 'A']--;   //消灭单词--每行只能消灭一个
			if (count[block[i][j] - 'A'] >= 0)
			{
				break;
			}
		}
	}

	for (i = 0; i < 26; i++)  //遍历数组看看有没有消灭干净
	{
		if (count[i] > 0)
		{
			return 0;
		}
	}
	return 1;
}

int main()
{
	int n = 0;
	scanf("%d", &n);  //要写的单词个数
	char block[4][7] = { 0 };
	int i = 0;
	for (i = 0; i < 4; i++)
	{
		scanf("%s", &block[i]);  //输入木块
	}
	char word[10][5] = { 0 };
	for (i = 0; i < n; i++)
	{
		scanf("%s", &word[i]);	  //输入单词
	}

	printf("\n");
	for (i = 0; i < n; i++)
	{
		if (search(block, word[i]))  //检索
		{
			printf("YES\n");
		}
		else
		{
			printf("NO\n");
		}
	}
	return 0;
}

【竞赛题目】木块(C语言详解),c语言,开发语言文章来源地址https://www.toymoban.com/news/detail-719444.html

到了这里,关于【竞赛题目】木块(C语言详解)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • LeetCode竞赛题目—在LR字符串中交换相邻字符

    作者: 渴望力量的土狗 博客主页:渴望力量的土狗的博客主页 专栏:每日一道LeetCode 工欲善其事必先利其器,给大家介绍一款超牛的斩获大厂offer利器——牛客网 点击免费注册和我一起刷题吧 目录 题目描述:在LR字符串中交换相邻字符 解答思路:双指针法 分析: Java解题

    2024年01月21日
    浏览(53)
  • 竞赛 题目:基于大数据的用户画像分析系统 数据分析 开题

    🔥 优质竞赛项目系列,今天要分享的是 基于大数据的用户画像分析系统 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng-senior/postgraduate 用户画像是指根据用户的属性、用户偏好、生活习惯、用户行为等信息而抽象出

    2024年02月05日
    浏览(51)
  • 云计算学习8——OpenStack高级运维企业实战竞赛题目

    声明:原创作品,严禁用于商业目的。 如有任何技术问题,欢迎和我交流:408797506(微信同号)。 腾讯课堂链接 B站试看视频链接 准备工作: 安装cinder脚本、对compute节点挂载第二个磁盘并且分两个区,一个区给cinder使用,一个区给swift使用。 (1) lsblk 查看分区,使用fdisk /de

    2024年02月06日
    浏览(38)
  • 2021 年数学建模竞赛题目D 题 连铸切割的在线优化

          在满足基本要求和正常要求的条件下,依据尾坯长度制定出最优的 切割方案。假定用户目标值为 9.5 米,目标范围为 9.0~10.0 米,对以下尾坯长 度:109.0、93.4、80.9、72.0、62.7、52.5、44.9、42.7、31.6、22.7、14.5 和 13.7(单位:米),按“尾坯长度、切割方案、切割损失”等

    2024年02月11日
    浏览(76)
  • 【数学建模】历年全国大学生数学建模竞赛题目+定位分析

    数学建模 https://so.csdn.net/so/search?q=%E6%95%B0%E5%AD%A6%E5%BB%BA%E6%A8%A1spm=1001.2101.3001.7020 国赛创办于1992年,每年一届,是首批列入“高校学科竞赛排行榜”的19项竞赛之一。2020年,来自全国及美国、英国、马来西亚的1470所院校/校区、45680队(本科41826队、专科3854队)、13万多人报名参赛

    2024年02月06日
    浏览(86)
  • 【数据结构和算法初阶(C语言)】复杂链表(随机指针,随机链表的复制)题目详解+链表顺序表结尾

    目录  1.随机链表的复制 1.2题目描述  1.3题目分析 1.4解题: 2.顺序表和链表对比 2.1cpu高速缓存利用率 3.结语 一个长度为  n  的链表,每个节点包含一个额外增加的随机指针  random   该指针可以指向链表中的任何节点或空节点。        构造这个链表的  深拷贝 。 深拷贝

    2024年03月10日
    浏览(87)
  • 计算机竞赛 题目:基于大数据的用户画像分析系统 数据分析 开题

    🔥 优质竞赛项目系列,今天要分享的是 基于大数据的用户画像分析系统 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng-senior/postgraduate 用户画像是指根据用户的属性、用户偏好、生活习惯、用户行为等信息而抽象出

    2024年02月07日
    浏览(43)
  • 计算机竞赛 题目:基于LSTM的预测算法 - 股票预测 天气预测 房价预测

    🔥 优质竞赛项目系列,今天要分享的是 基于LSTM的预测算法 - 股票预测 天气预测 房价预测 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng-senior/postgraduate 时间序列预测是一类比较困难的预测问题。 与常见的回归预测

    2024年02月07日
    浏览(48)
  • 2023年第二十届五一数学建模竞赛题目 C题详细思路

    详细思路以及发布视频版,大家可以去观看,这里是对应的文字版,内容相差不多。 C题:“双碳”目标下低碳建筑研究 C题的问题设置其实是本次比赛最简单的一道,就是简单的综合评价+预测模型。真正提升C题难度的其实是C题的数据,C题需要我们自行收集数据。我认为主

    2024年02月01日
    浏览(67)
  • 2023年第二十届五一数学建模竞赛题目 B题超详细思路

    详细思路以及发布视频版,大家可以去观看,这里是对应的文字版,内容相差不多。 B题:快递需求分析问题 B题的问题难度不大,难点就在于后几问的模型求解。问题多、模型多、冗杂,就是B题的特点。 难度 ABC 选题 BCA 给出数据   数据预处理(异常值、缺失值) 问题多、

    2024年02月01日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包