草庐IT

每日一练蓝桥杯C语言:暴力枚举

阿波日记 2023-10-25 原文

在这里我给大家推荐一款不错刷算法学习网站:点击这处链接牛客网;牛客网作为国内内容超级丰富的 IT 题库,各种东西看的我眼花缭乱,题库+面试+学习+求职+讨论+大厂内推等等服务,堪称"互联网求职神器"。它好就好在不只是一个刷题的平台,还是一个交流学习的平台,发个问题贴总有热心的大佬帮助。

暴力枚举

在进行归纳推理时,如果逐个考察了某类事件的所有可能情况,因而得出一般结论,那么这结论是可靠的,这种归纳方法叫做枚举法.


  • 枚举法,也叫暴力破解法,是一种基于逐个尝试答案的一种问题求解策略。

  • 最开始接触算法的时候,大家练习的基础算法都是有关于枚举算法的,比如打印出9 * 9的乘法表,求水仙花数,求素数等等,像这一类的题目就是在一定的范围内寻找满足条件的答案。

  • 枚举算法的核心思想就是:枚举所有的可能

猜年龄

问题描述:

美国数学家维纳(N.Wiener)智力早熟,11岁就上了大学。他曾在1935~1936年应邀来中国清华大学讲学。 一次,他参加某个重要会议,年轻的脸孔引人注目。于是有人询问他的年龄,他回答说:“我年龄的立方 是个4位数。我年龄的4次方是个6位数。这10个数字正好包含了从0到9这10个数字,每个都恰好出现1次。”请你推算一下,他当时到底有多年轻。直接提交他那时的年龄数字

思路分析:

通过暴力破解的方法,找到年龄的大概范围,假设他的年龄为x,10^3=1000, 30^4=8100,说明x的范围在[10,30]之间。

int main(){
	for(int i = 10;i <= 30;i++)
	{
		printf("%d= %.0f %.0f\n",i,pow(i,3),pow(i,4));//pow指i的立方,i的四次方
	}
	return 0;
}

结果:

网友年龄

问题描述:

某君新认识一网友。当问及年龄时,他的网友说:“我的年龄是个2位数,我比儿子大27岁,

如果把我的年龄的两位数字交换位置,刚好就是我儿子的年龄”

请你计算:网友的年龄一共有多少种可能情况?

提示:30岁就是其中一种可能哦.

请填写表示可能情况的种数。

思路分析:

网友的年龄比他儿子大27,就说明网友至少27岁,即为初始值为27,两位数最大也就是99,范围【27,99】,假设网友年龄为i,设个位为b,十位数为10a,把他的年龄数字交换位置正好是他的儿子的年龄,那么他儿子的年龄为10b+a,判断条件是网友的年龄减去27等于他儿子的年龄,sum累加几种可能性。

#include<stdio.h>
#include<math.h>
int main()
{
	int i,a,b,son,sum=0;

	for(i=27;i<100;i++){
		a=i/10;
	    b=i%10; //例如41对10整除取4,对10取余得1,即他儿子14岁
		son=(b*10)+a;
		
		if(27==i-son){
			printf("%d\n",i);
			sum++;
		}
		
	}
	printf("共有%d种可能性\n",sum);
	return 0;
}

结果:

30
41
52
63
74
85
96
共有7种可能性

生日年龄数

问题描述:

某君从某年开始每年都举办一次生日party,并且每次都要吹熄与年龄相同根数的蜡烛。现在算起来,他一共吹熄了236根蜡烛。

请问,他从多少岁开始过生日party的?

请输出他开始过生日party的年龄数。

注意:你输出的应该是一个整数,不要输出任何多余的内容或说明性文字。

输入

没有输入。

输出

输出一个整数,即某君开始过生日party的年龄数

提示

用printf或cout输出答案。

思路分析:

假设i为初始年龄,j为终止年龄,j肯定要大于i,那么j=i+1,k为多少根蜡烛!暴力累加。

int main()
{

	for(int i=1;i<=100;i++)
	{
		for(int j=i+1;j<=100;j++)
		{
			int sum=0; 
			for(int k=i;k<=j;k++){
				sum += k;
			
			}
			if(sum==236)
			   printf("%d",i);
		}
	}
	return 0;
}

结果:26

数学题

问题描述:

有限五位数

个位数为6且能被3整除的五位数有多少个?

思路分析:

首先分析5位数的范围【10000,99999】,个位数为6说明至少两位数,并对3取余,ans累加。

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

int main() {
	int ans=0;
	for(int i=10000;i<=99999;i++){
		if((i*10+6)%3==0){
			ans++;
		}
	}
	printf("能被3整除的有%d个",ans);
	 
	return 0;
}

结果:能被3整除的有3000

马虎的算式

问题描述:

小明是个急性子,上小学的时候经常把老师写在黑板上的题目抄错了。有一次,老师出的题目是:36 x 495 =? 他却给抄成了:396 x 45 = ? 但结果却很戏剧性,他的答案竟然是对的!! 因为 36 * 495 = 396 * 45= 1782 类似这样的巧合情况可能还有很多,比如:27* 594 = 297 * 54

假设 a b c d e 代表1~9不同的5个数字(注意是各不相同的数字,且不含0)

能满足形如: ab * cde = adb* ce 这样的算式一共有多少种呢?请你利用计算机的优势寻找所有的可能,并回答不同算式的种类数。

满足乘法交换律的算式计为不同的种类,所以答案肯定是个偶数。

答案直接通过浏览器提交。注意:只提交一个表示最终统计种类数的数字,不要提交解答过程或其它多余的内容。

思路分析:

假设a b c d e 代表1~9不同的5个数字,a b c d e的范围在【1,9】,有多少种结果用ans累加法,通过判断条件abcde=adbce满足条件累加1,然后有一种可能就是a与b相等,所以判断否定a不等于b,其他字母也一样。

 #include<stdio.h>
 int main(){
 	int ans=0,m,n;
 	for(int a = 1;a<=9;a++){
 		for(int b = 1;b<=9;b++){
 			for(int c = 1;c<=9;c++){
 				for(int d =1;d<=9;d++){
 					for(int e =1;e<=9;e++){
 						
 						m = (a*10+b)*(c*100+d*10+e);
 						n = (a*100+d*10+b)*(c*10+e);
 						if(m==n&&a!=b&&a!=c&&a!=d&&a!=e&&b!=c&&b!=d&&b!=e&&c!=d&&c!=e&&d!=e){
 							ans++;
 						}
 					}
 				}
 			}
 		}
 	}
 	printf("一共%d种",ans);
 	return 0;
 }

结果:142

奇怪的分式

问题描述:

上小学的时候,小明经常自己发明新算法。一次,老师出的题目是: 1/4 乘以 8/5 小明居然把分子拼接在一起,分母拼接在一起,答案是:18/45。老师刚想批评他,转念一想,这个答案凑巧也对啊,真是见鬼!

对于分子、分母都是 1~9 中的一位数的情况,还有哪些算式可以这样计算呢? 请写出所有不同算式的个数(包括题中举例的)。

显然,交换分子分母后,例如:4/1 乘以 5/8 是满足要求的,这算做不同的算式。

但对于分子分母相同的情况,2/2 乘以 3/3 这样的类型太多了,不在计数之列!

注意:答案是个整数(考虑对称性,肯定是偶数)。

请通过浏览器提交。不要书写多余的内容。

思路分析:

其实跟上一道差不多,找出范围,找出判断条件,找出不符合条件,利用累加ans

注意不可以用(a/b)*(c/d)==((a*10+c)/b*10+d)),而是利用数学里面的十字相乘法

 #include<stdio.h>
 int main(){
 	int ans=0;
 	for(int a=1;a<=9;a++){
 		for(int b =1;b<=9;b++){
 			for(int c =1;c<=9;c++){
 				for(int d=1;d<=9;d++){
 					if(a==b&&c==d)
 						continue;
 					int e = a*10+c,f = b*10+d;
 					if(a*c*f==b*d*e){
 						ans++;
 					}	
 					
 				}
 			}
 		}
 	}
 	printf("%d",ans);
 	return 0;
 }

结果:14

几何题

问题描述:

小蓝有一个超大的仓库,可以摆放很多货物。现在,小蓝有 n 箱货物要摆放在仓库,每箱货物都是规则的正方体。小蓝规定了长、宽、高三个互相垂直的方向,每箱货物的边都必须严格平行于长、宽、高。小蓝希望所有的货物最终摆成一个大的立方体。即在长、宽、高的方向上分别堆 L 、 W 、 H 的货物,满足 n = L × W × H。给定 n ,请问有多少种堆放货物的方案满足要求。

例如,当 n = 4 时,有以下 6 种方案: 1 × 1 × 4 、 1 × 2 × 2 、 1 × 4 × 1 、 2 × 1 × 2 、 2 × 2 × 1 、 4 × 1 × 1

请问,当 n = 2021041820210418 (注意有 16位数字)时,总共有多少种方案?
提示:建议使用计算机编程解决问题。

思路分析:

循环暴力枚举解决法,理论上可以,可行性不行,转换思路分解出整个数字的所有因(约)数,然后对所有的因数暴力枚举两重循环,计算出结果。

 #include<stdio.h>
 int judge(long long a,long long b,long long c)
 {
 	if(a==b==c)//长宽高相同排列只有一种组合
	  return 1;
	 if(a==b&&a!=c||a==c&&a!=b||b==c&&a!=b) //长宽高 任意两个相同排列只有3种
	  return 3;
	 else
	   return 6; //长宽高都不相同排列只有6种
    
	   
 }
 int mian()
 {
 	long long n =2021041820210418;
 	long long L,W,H;
 	long long ans=0;
 	
 	for(L=1;L*L*L<=n;L++) //l是最小的一方
	 {
	 	if(n%L==0)//小优化
	  {
	 	 	
	 	 
	 	 for(W=L;L*W*W<=n;W++)//l是第二大的一方,次数多
	     {
	     	if(n%(L*W)==0)//小优化 
	     	{
	     		H=n/L/W;
				 if(H>=W){
				 	ans+=judge(L,W,H);
				 } 
	     	}
	     }
  }
	 	
	  
	 
    }
     printf("%d",ans);
    
	
	  
 } 

结果:2430

观众老爷们,点个关注吧!

有关每日一练蓝桥杯C语言:暴力枚举的更多相关文章

  1. ruby - 如何将脚本文件的末尾读取为数据文件(Perl 或任何其他语言) - 2

    我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚

  2. ruby - 寻找通过阅读代码确定编程语言的ruby gem? - 2

    几个月前,我读了一篇关于ruby​​gem的博客文章,它可以通过阅读代码本身来确定编程语言。对于我的生活,我不记得博客或gem的名称。谷歌搜索“ruby编程语言猜测”及其变体也无济于事。有人碰巧知道相关gem的名称吗? 最佳答案 是这个吗:http://github.com/chrislo/sourceclassifier/tree/master 关于ruby-寻找通过阅读代码确定编程语言的rubygem?,我们在StackOverflow上找到一个类似的问题:

  3. Unity 热更新技术 | (三) Lua语言基本介绍及下载安装 - 2

    ?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------

  4. 7个大一C语言必学的程序 / C语言经典代码大全 - 2

    嗨~大家好,这里是可莉!今天给大家带来的是7个C语言的经典基础代码~那一起往下看下去把【程序一】打印100到200之间的素数#includeintmain(){ inti; for(i=100;i 【程序二】输出乘法口诀表#includeintmain(){inti;for(i=1;i 【程序三】判断1000年---2000年之间的闰年#includeintmain(){intyear;for(year=1000;year 【程序四】给定两个整形变量的值,将两个值的内容进行交换。这里提供两种方法来进行交换,第一种为创建临时变量来进行交换,第二种是不创建临时变量而直接进行交换。1.创建临时变量来

  5. ruby - 引用具有指定索引的枚举器值 - 2

    假设我有一个可枚举对象enum,现在我想获取第三个项目。我知道一种通用方法是转换成数组,然后使用索引访问,如:enum.to_a[2]但这种方式会创建一个临时数组,效率可能很低。现在我使用:enum.each_with_index{|v,i|breakvifi==2}但这非常丑陋和多余。执行此操作最有效的方法是什么? 最佳答案 你可以使用take剥离前三个元素,然后剥离last从take给你的数组中获取第三个元素:third=enum.take(3).last如果您根本不想生成任何数组,那么也许:#Ifenumisn'tanEnum

  6. ruby-on-rails - Ruby on Rails,使用同名枚举的问题 - 2

    以下是我认为的一些下拉列表:'form-control')%>和'form-control')%>这是我的application_helper.rbdefget_advance_bookingret=[{:require_booking=>'No'},{:require_booking=>'Yes'}]enddefget_instant_bookingret=[{:instant_booking=>'No'},{:instant_booking=>'Yes'}]end但现在的问题是,在我的模型product.rb中,我无法设置具有相同名称的枚举:classProduct我收到的错误是您

  7. ruby - 如何保持我不常用的编程语言技能 - 2

    关闭。这个问题是off-topic.它目前不接受答案。想改进这个问题吗?Updatethequestion所以它是on-topic用于堆栈溢出。关闭11年前。Improvethisquestion我不经常使用ruby​​-通常它加起来相当于每两个月或更长时间编写一次脚本。我的大部分编程都是使用C++进行的,这与ruby​​有很大不同。由于我与ruby​​之间的差距如此之大,我总是忘记语言的基本方面(比如解析文本文件和其他简单的东西)。我想每天练习一些基本的东西,我想知道是否有一些我可以订阅的网站,并且会向我发送当天的Ruby问题或类似的东西。有人知道这样的站点/Internet服务吗?

  8. ruby-on-rails - 如果特定语言环境中缺少翻译,如何配置 i18n 以使用 en 语言环境? - 2

    如果特定语言环境中缺少翻译,如何配置i18n以使用en语言环境翻译?当前已插入翻译缺失消息。我正在使用RoR3.1。 最佳答案 找到相似的question这里是答案:#application.rb#railswillfallbacktoconfig.i18n.default_localetranslationconfig.i18n.fallbacks=true#railswillfallbacktoen,nomatterwhatissetasconfig.i18n.default_localeconfig.i18n.fallback

  9. ruby-on-rails - i18n 与枚举 gem - 2

    我正在使用Enumerizegemhttps://github.com/brainspec/enumerize/它允许我以简单的形式使用漂亮的选择。并且此选择中的所有选项均已翻译。en:enumerize:user:sex:male:'Man'female:'Woman'所以,在我的表单中,我选择了变体“男人”和“女人”。当我用“男人”值保存记录时,我得到了“男性”值的性别属性。现在我想在显示页面上将该值显示为“Man”,但是=@user.sex输出为'male'而不是'Man' 最佳答案 我可能会使用.text方法(您可以通过使用

  10. ruby-on-rails - 如何通过 URL 更改语言环境? - 2

    在我的双语Rails4应用程序中,我有一个像这样的LocalesController:classLocalesController用户可以通过此表单更改其语言环境:deflocale_switcherform_tagurl_for(:controller=>'locales',:action=>'change_locale'),:method=>'get',:id=>'locale_switcher'doselect_tag'set_locale',options_for_select(LANGUAGES,I18n.locale.to_s)end这有效。但是,目前用户无法通过URL更改

随机推荐