首页 > 其他分享 >lanqiaobei15-21

lanqiaobei15-21

时间:2023-04-16 19:22:33浏览次数:37  
标签:30 进制 int 31 lanqiaobei15 include 回文 21

蓝桥杯[每日题例] c++ 1259.奇怪的捐赠

题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
地产大亨 Q 先生临终的遗愿是:拿出 100 万元给 X 社区的居民抽奖,以稍慰藉心中愧疚。
麻烦的是,他有个很奇怪的要求:

1.100 万元必须被正好分成若干份(不能剩余)。每份必须是 7 的若干次方元。比如:1 元, 7 元, 49 元,343 元,...
2.相同金额的份数不能超过 5 份。
3.在满足上述要求的情况下,分成的份数越多越好!

请你帮忙计算一下,最多可以分为多少份?

#include <iostream>
#include <vector>
using namespace std;
int main()
{
	// 请在此输入您的代码
	int num = 0;
	int money = 1000000;
	//本来想定义一个数组,用于统计位数,但是不知道长度所以就定义了vector<int>
	vector<int> septinary;
	//十进制转七进制
	while (money)
	{
		septinary.push_back(money % 7);
		money = money / 7;
	}
	//迭代器
	vector<int>::iterator it;
	//1*7^8>1000000,所以1*7^8不在计算考虑的范围内
	//1*7^7=823543,而1*7^6=117649,因为相同的金额不能超过五份所以
	//即使(1*7^6)*5+(1*7^5)*5+...+(1*7^1)*5都不能超过1*7^7,
	//故而不能考虑先用小的七进制将1000000万填满
	//只能将其转换为七进制,并对七进制上的每一位数(每一个七次方前面*的倍数,就是钱的份数)
	//定义一个num统计即可
	for (it = septinary.begin(); it != septinary.end(); it++)
	{
	/*cout << *it << endl;*/
	//遍历
	//累加
	num += *it;
    }
    cout << num << endl;
    return 0;
}

错误思路:


最开始我对该题的理解是在100万元里找分成7^n的所有可能,将他们进行相加得回100万,在考虑到每个金额不能超过五份时,我将100万分成5份20万进行转化为七进制的计算,得到3*70+4*71+0*72+2*73+6*74+4*75+1*71=200000,在这里我发现了不对劲,我之前没考虑到七进制的前面的位数(即将七进制分成多少份),所以这样子分的后果就是得到(3+4+0+2+6+4+1)*5=35份,与答案16份不一致。


正确思路:


于是我这次不将100万分成五份,并将其转换为七进制,发现七进制前面的数都不超过5份,思考到1*78>1000000,所以1*78不在计算考虑的范围内,且1*77=823543,而1*76=117649,因为相同的金额不能超过五份所以,即使(1*76)*5+(1*75)*5+...+(1*71)*5都不能超过1*77,所以必须要有一个1*77,同理前面也所有的五份相加都不能超过后一位的1份于是不能考虑先将前面用每个七进制*5进行填满,只能将其直接转为七进制,得到完美分割成16分的七进制数。

蓝桥杯[每日题例] c++ 2384.整数分解

问题描述
将 3 分解成两个正整数的和, 有两种分解方法, 分别是 3 = 1 + 2 3 = 1 + 2 和 3 = 2 + 1 3 = 2 + 1 。
注意顺序不同算不同的方法。
将 5 分解成三个正整数的和, 有 6 种分解方法,
它们是 1 + 1 + 3 = 1 + 2 + 2 = 1 + 1 + 3 = 1 + 2 + 2 = 1 + 3 + 1 = 2 + 1 + 2 = 2 + 2 + 1 = 3 + 1 + 11 + 3 + 1 = 2 + 1 + 2 = 2 + 2 + 1 = 3 + 1 + 1 。
请问, 将 2021 分解成五个正整数的和, 有多少种分解方法 ?
答案提交
这是一道结果填空的题, 你只需要算出结果后提交即可。本题的结果为一个整数, 在提交答案时只填写这个整数, 填写多余的内容将无法得分。

#include <iostream>
using namespace std;
int main()
{
	// 请在此输入您的代码
	//int count = 0;

	//超级暴力算法
	//该方法最开始我想到的是五次遍历2021将所有的可能进行组合
	//并判断他们相加是否=2021
	//该方法需要计算机计算2021^5=33715652388894101次,时间复杂度爆表
	//我甚至对它进行行了一点优化,考虑到1+1+1+1+2017=2021
	//所以我只需要计算2017^5=33383317356629857次
	//我特地去查了一下计算机运行一次加法大概需要40ps(1ps=10^(-12)s)
	//运算完下面代码大概需要需要花费15.5天,当然这还不包括里面的变量声明赋值的时间
	/*for (int i = 1; i <= 2017; i++)
	{
		for (int j = 1; j <= 2017; j++)
		{
			for (int k = 1; k <= 2017; k++)
			{
				for (int l = 1; l <= 2017; l++)
				{
					for (int m = 1; m <= 2017; m++)
					{
						if (i + j + k + l + m == 2021)
						{
							count++;
						}
					}
				}
			}
		}
	}
	cout << count << endl;*/

	//插空法
	//将2021分成2021份1,在里面插入4个分割符将其分成五份便可对应五个正整数的和
	//考虑不包头尾,即在2020个空里面进行分割
	//分成五份的同时还要保证分割符不能相同,否则会有0+0+0+0+2021的情况出现
	
	long long result;
	long long n = 2020;
	//结果超出int型所以运算时n也要用long long型
	result = (n * (n - 1) * (n - 2) * (n - 3)/(4*3*2*1));
	
	
	cout << result << endl;
	return 0;
}

思路:


方法一:

​ 如题暴力算法,该方法需要计算约20215次时间复杂度极高,计算机需要计算都要十几天


方法二:

​ 该方法非常巧妙找出五个不同且相加为2021的数,于是我们直接对2021进行截取成五段,找出其中所有可能这需要用到高中的插空法进行计算,便可得到结果

蓝桥杯[每日题例] c++ 1038.含2天数

题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
小蓝特别喜欢 2,今年是公元 2020 年,他特别高兴,因为每天日历上都可以看到 2。
如果日历中只显示年月日,请问从公元 1900年 1 月 1 日到公元 9999 年 12 月 31 日,
一共有多少天日历上包含 2。即有多少天中年月日的数位中包含数字 2。

#include <iostream>
using namespace std;

//传入一个数判断位数上是否存在2
int selecttwo(int n)
{
	while (n)
	{
		if (n % 10 == 2)
		{
			return 1;
		}
		n /= 10;
	}
	return 0;
}

int main()
{
	// 请在此输入您的代码
	
	int count = 0;
	int days[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
	for (int year = 1900; year <= 9999; year++)
	{
		//对每一年进行闰年判断
		if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
		{
			//是闰年,则将其的二月赋值为29天
			days[2] = 29;
		}
		else
		{
			//不是就将它的二月赋值回28天
			days[2] = 28;
		}
		//月份
		for (int month = 1; month <= 12; month++)
		{
			//日期
			for (int day = 1; day <= days[month]; day++)
			{
				//传入年月日进行是否存在2判断
				if (selecttwo(year) || selecttwo(month) || selecttwo(day))
				{
					count++;
				}
			}
		}
	}
	cout << count << endl;
	return 0;
}

思路:


我们先定义days[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 }代表1-12月份,用0顶替掉days[0],然后就对每个年份的闰年进行判断是闰年就将2月赋值为29天,不是就将2月赋值为28天,然后对月和日进行选择,最后定义一个判断年月日中是否有2的函数,调用判断即可

蓝桥杯[每日题例] c++ 160.字符计数

题目描述
给定一个单词,请计算这个单词中有多少个元音字母,多少个辅音字母。

元音字母包括 a, e, i, o, u,共五个,其他均为辅音字母。

输入描述
输入格式:

输入一行,包含一个单词,单词中只包含小写英文字母。单词中的字母个数不超过 100。

输出描述
输出两行,第一行包含一个整数,表示元音字母的数量。

第二行包含一个整数,表示辅音字母的数量。

#include <iostream>
#include <string>
using namespace std;
int main()
{
	// 请在此输入您的代码
	int a = 0;
	int b = 0;
	string n;
	cin >> n;
	for (int i = 0; i < n.length(); i++)
	{
		if (n[i] == 'a' || n[i] == 'e' || n[i] == 'i' || n[i] == 'o' || n[i] == 'u')
		{
			a++;
		}
		else
		{
			b++;
		}
	}

	cout << a << endl << b << endl;
	return 0;
}

思路:

定义a,b记录元音字母个数和辅音字母个数,判断是否是元音字母,是就a+=1,不是就b+=1。

蓝桥杯[每日题例] c++ 2381.三角回文数

问题描述
对于正整数 n, 如果存在正整数k使得 n = 1 + 2 + 3 + ⋯ + k = k * (k + 1) / 2,
则 n 称为三角数。例如, 66066 是一个三角数, 因为 66066 = 1 + 2 + 3 + ⋯ + 363。
如果一个整数从左到右读出所有数位上的数字, 与从右到左读出所有数位 上的数字是一样的, 则称这个数为回文数。
例如, 66066 是一个回文数, 8778 也是一个回文数。
如果一个整数 n既是三角数又是回文数, 我们称它为三角回文数。例如 66066 是三角回文数。
请问, 第一个大于 20220514 的三角回文数是多少 ?
答案提交
这是一道结果填空的题, 你只需要算出结果后提交即可。本题的结果为一 个整数, 在提交答案时只填写这个整数, 填写多余的内容将无法得分。

#include <iostream>
using namespace std;
int main()
{
	int num = 0;
	for (int i = 0;; i++)
	{
		//实现1+2+3+4+5+...+n
		//即找出所有的三角数
		num = num + i;

		if (num > 20200514)
		{
			int temp = num;
			
			int x = 0;
			//将该三角数进行倒转
			//用于判断回文数
			while (temp != 0)
			{
				x = x * 10 + temp % 10;
				temp /= 10;
			}
			if (x == num)
			{
				//输出三角回文数
				cout << x << endl;
				break;
			}
			/*x = 0;*/
		}

	}

	return 0;
}

思路:

三角数的实质是1+2+3+…+n的累加,定义一个num进行记录,然后对每一个数进行翻转,然后和原来的数进行对比判断是否是回文数,最后输出即可

蓝桥杯 c++[每日题例] 2409.大乘积

问题描述
小蓝有30 个数,分别为:
99, 22, 51, 63, 72, 61, 20, 88, 40, 21, 63, 30, 11, 18, 99, 12, 93, 16, 7, 53, 64, 9, 28, 84, 34, 96, 52, 82, 51, 77 。

小蓝可以在这些数中取出两个序号不同的数,共有
30×29/2=435 种取法。

请问这435 种取法中,有多少种取法取出的两个数的乘积大于等于2022 。

答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

#include <iostream>
using namespace std;
int main()
{
	// 请在此输入您的代码
	int a[30] = { 99, 22, 51, 63, 72, 61, 20, 88, 40, 21, 63, 30, 11, 18, 99, 12, 93, 16, 7, 53, 64, 9, 28, 84, 34, 96, 52, 82, 51, 77 };
	int count = 0;
	//直接找出他们的所有
	for (int i = 0; i < 30; i++)
	{
        
		//拿到第一个数,让他和后面的数进行相乘
		for (int j = i + 1; j < 30; j++)
		{
			
            //防止两次拿出一样的数
            if(a[i]!=a[j])
            {
                //余2022进行比较
                if (a[i] * a[j] >= 2022)
                {				
                    count++;
                }
				
            }
			
		}
	
    }
	cout << count << endl;
	return 0;
}

思路:


直接找出这三十个数的所有组合,同时还要小心不要两次拿出一样的数,这里我一直以为没什么问题,但是提交就是报错,写的时候一时脑子转不过来,我想了十多分钟才解决

蓝桥杯[每日题例] 676.立方尾不变

题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。

有些数字的立方的末尾正好是该数字本身。 比如:
1, 4, 5, 6, 9, 24, 25, ....
请你计算一下,在10的4次方
以内的数字中(指该数字,并非它立方后的数值),符合这个特征的正整数一共有多少个。

#include <iostream>
using namespace std;
int main()
{
	// 请在此输入您的代码
	int count = 0;
	for (int i = 1; i <= 10000; i++)
	{
		//找十位
		if ((i * i * i % 10) == i)
		{
            
            /*cout<<i*i*i<<endl;
            cout<<i<<endl;*/
			count++;
		}
		//找百位
		if ((i * i * i % 100) == i)
		{
            /*cout<<i*i*i<<endl;
            cout<<i<<endl;*/
			count++;	
        }
        //找千位
        if ((i * i * i % 1000) == i)
        {
            /*cout<<i*i*i<<endl;
            cout<<i<<endl;*/
            count++;	
        }
	
	}
    cout << count << endl;
    return 0;
}

思路:

直接算就可以了

标签:30,进制,int,31,lanqiaobei15,include,回文,21
From: https://www.cnblogs.com/xiaoxinhai/p/17323859.html

相关文章

  • ABC214G
    首先可以考虑容斥,也就是\(ans=\sum_{i=0}^n(-1)^i\timesh_i\times(n-i)!\),\(h_i\)表示有\(i\)步限制不满足的方案数。考虑到如果对于一个排列,连\(i\rightarrowp_i\)的边会形成若干个环组成的有向图。那么对于两个相同大小的排列,连接\(p_i\rightarrowq_i\)的边同样......
  • Python 人工智能:21~23
    原文:ArtificialIntelligencewithPython协议:CCBY-NC-SA4.0译者:飞龙本文来自【ApacheCN深度学习译文集】,采用译后编辑(MTPE)流程来尽可能提升效率。不要担心自己的形象,只关心如何实现目标。——《原则》,生活原则2.3.c21循环神经网络和其他深度学习模型在本章中,我们将......
  • 4.11hut21训练赛
    A.P1233木棍加工该题可以使用贪心,赛时脑子莫名把题目意思改了,导致没写出来。。。将木棍按照pair从大到小排序,那么第一个必须要耗费准备时间删除,因为没有l,w都大于等于它的存在。我们删除它的时候可以继续向后删除l,w都小于等于它的木棍,同时更新l,w,将所有能删的都删掉,也就是优......
  • kuangbin专题一 简单搜索 点火游戏(FZU-2150)
    FireGameDescriptionFatbrotherandMazeareplayingakindofspecial(hentai)gameonanN*Mboard(Nrows,Mcolumns).Atthebeginning,eachgridofthisboardisconsistingofgrassorjustemptyandthentheystarttofireallthegrass.Firstlyt......
  • 华为认证H12-821题库解析
    201、(单选题)第三类LSA的LinkID是:A、所描述的ABR的RouterIDB、所在网段上DR的端口IP地址C、所描述的目的网段D、生成这条LSAde路由器的RouterID正确答案是:C解析:三类lsa的linkid表示目的网段的网络地址。因此答案选C。202、(单选题)关于BGP可靠的路由更新,描述正确的是:A、BGP......
  • poj 2182
    LostCowsPOJ-2182与这题一样BuyTickets-POJ2828-VirtualJudge(csgrandeur.cn)题意:有1~NN个数字,这N个数字的顺序是打乱的,从第二个数字开始给你它的前面有多少个数字比他小思路:输入的数字都要加一,然后我们从后往前遍历,在线段树中如果左子树的sum‘>sum,则进入左子......
  • kuangbin专题一 简单搜索 棋盘问题(POJ-1321)
    棋盘问题TimeLimit:1000MS MemoryLimit:10000KTotalSubmissions:125427 Accepted:56304Description在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别。要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘......
  • ASEMI代理ADI亚德诺AD8210YRZ-REEL7车规级芯片
    编辑-ZAD8210YRZ-REEL7芯片参数:型号:AD8210YRZ-REEL7偏移电压(RTI):±1.0mV超温(RTI):±1.8mV差分输入阻抗:2kΩ共模输入阻抗:5MΩ共模输入电压范围:−2~+65V差分输入电压范围:250mV共模抑制:120dB输出电压范围:0.05~4.9V输出阻抗:2Ω小信号−3dB带宽:450kHz斜率:3V/µs......
  • Another Crisis UVA - 12186
      #include<iostream>#include<cstring>#include<vector>#include<algorithm>usingnamespacestd;constintN=1e5+3;intf[N],n,K;vector<int>g[N];voiddfs(intx){ intb[N],tot; tot=0; if(g[x].size()==0)......
  • ABC214G/S2OJ1504
    ABC214G/S2OJ1504又是我不会的/hanx做了一天/ng直接做显然是不行的,所以考虑转化题意,对于\(\foralli\),连边\((A_i,B_i)\),现在题意就变成给边染色了,这样统计的就是不合法的,考虑容斥,一个很\(\text{naive}\)的容斥是总数-不合法,发现你根本做不了,所以很容易想到加强限制,让答......