首页 > 其他分享 >P8599 [蓝桥杯 2013 省 B] 带分数

P8599 [蓝桥杯 2013 省 B] 带分数

时间:2024-03-10 19:23:16浏览次数:32  
标签:return int 带分数 蓝桥 ++ num judge include 2013

题目知识点:全排列加指针划分数组。
链接:https://www.luogu.com.cn/problem/P8599

#include<iostream>
#include<vector>
#include<algorithm>
#include<math.h>
#include<sstream>
#include<string>
#include<string.h>
#include<iomanip>
#include<map>
#include<queue>
#include<limits.h>
#include<climits>
using namespace std;
typedef long long ll;


int numlst[15];//可以删去
bool vis[15] = { 0 };//用于全排列记录是否被加入
int target[15] = { 0 };//记录当前队形
int n;
int ans = 0;
int get_num(int b, int a)//记录区间[a,b]形成的数字
{
	int aa = 0;
	for (int i = b; i <= a; i++)aa = aa * 10 + target[i];
	return aa;
}
bool judge()//判断能不能形成
{
	int i = 1;
	int final = 9;
	int j = i;
	for (j; j < final; j++)
	{
		int k = j + 1;//这里不要把赋值k的写到循环外面了,之前就是犯这个错误
		int numint = 0;
		numint = get_num(i, j);//get_num会更好
		if (numint > n)return false;//剪枝,整数部分
		for (k; k < final; k++)
		{
			int fz = 0;
			fz = get_num(j + 1, k);
			int fm = 0;
			fm = get_num(k + 1, final);
			if (fz % fm == 0 and fz / fm + numint == n)return true;
		}
	}


}
void dfs(int num)
{
	if (num == 9)//如果递归到第9层,那么就可以判断并返回,其实正确的应该改成:补充
		if (judge())
		{
			ans++;
			return;
		}
	for (int i = 1; i < 10; i++)
    //全排列的代码
	{
		if (!vis[i])
		{
			vis[i] = 1;
			target[num+1] = numlst[i];
			dfs(num+1);
			vis[i] = 0;
		}
	}
}
int main()
{
	for (int i = 1; i < 10; i++)numlst[i] = i;
	cin >> n;
	dfs(0);
	cout << ans;
	return 0;
}
上面代码:
if (num == 9)//如果递归到第9层,那么就可以判断并返回,其实正确的应该改成:补充
		if (judge())
		{
			ans++;
			return;
		}
改为:
if (num == 9)
{
	if (judge())ans++;
    return;
}
会更符合逻辑,因为不一定得judge才退出,如果judge是false一样得退出

由于一些dinner错误调试了十几分钟

标签:return,int,带分数,蓝桥,++,num,judge,include,2013
From: https://www.cnblogs.com/zzzsacmblog/p/18064598

相关文章

  • [NOIP2017 提高组] 小凯的疑惑 / [蓝桥杯 2013 省] 买不到的数目
    这肯定是学证明了,看这篇文章补充一下细节首先,\(m\)的范围应该是\([0,b-1]\)然后,当\(m\)取不同值的时候,\(ma\)%\(b\)一定为不同值(这个性质确实有点奇特,可以记下来)反证,如果\(m_1a\equivm_2a\:(mod\:b)\)且\(0≤m_1<m_2≤b-1\),那么就有\(b|(m_2-m_1)a\),题目给出了\(a,b\)互质,......
  • 每天一道蓝桥杯 Day3 移动字母
     题意: 思考过程:首先观察这道题的数据范围不是很大,一共才6个位置,并且每个位置只出现一次。那么不考虑合法,只算总状态的话就是7*6*5*4*3*2*1=720状态数很少,启发我们可以用搜索!那么搜索是用dfs还是bfs?bfs有一个特性:从s出发,第一次搜索到状态t时所用的步数,肯定是所需的最小......
  • 蓝桥杯-地宫取宝
    这是一个dp题,可以用4维数据来表示所有的状态。但是有一个需要注意的点,一般来说,对于每个坐标,有拿跟不拿两种情况,如果没有拿任务宝物的状态表示为0,那么拿取了价值为0的宝物时,要以另一种情况来跟没拿区分。处理的方法就是将所有宝物的价格+1。longlongdp[55][55][15][15];const......
  • 【蓝桥-大试牛刀7-最短路专场】一点提示
    最短路1求个全源最短路。看数据范围\(1\len\le100\),直接floyd秒掉就行。最短路2先判负环,用Bellman-Ford,当然建议用队列优化版的(国内一般叫spfa)。虽然说spfa复杂度不稳定,但也一定比朴素版要快一点的。第二步还是求全源最短路,但是这个题的数据范围到了\(1\len\le3\times10^3......
  • [蓝桥杯 2019 省 B] 后缀表达式
    这题没想到怎么贪心,看题解恍然大明白#include<iostream>#include<stdio.h>#include<algorithm>#include<string>#defineFor(i,j,n)for(inti=j;i<=n;++i)usingnamespacestd;typedeflonglongLL;constintN=2e5+5;LLans;in......
  • [蓝桥杯 2019 省 B] 等差数列
    实际上这道题不需要先排序再求gcd,因为无论是哪两项之前作差,都不会影响最后的gcd的结果。因为公差是从a2-a1开始算的,因此i=1时要特殊处理,不能把a1-0计入贡献,否则会算出错误的gcd。即作差时不要加上a1-0,统计最值时不要漏掉a1#include<iostream>#include<stdio.h>#include<a......
  • Java蓝桥杯题目——1264排个序
    题目 思路:1、输入数据2、用冒泡排序将数组(下标为pj的)部分升序,3、判断是否有前一个元素大于后一个元素(降序),有则返回false注意:(1)数组p元素的取值不能大于数组a的长度,因为p元素是a的下标(2)数组下标越界问题,使用i<a.length判断(3)并非所有元素都要降序才返回false,只要有前一个元......
  • 每天一道蓝桥杯 Day2 翻转+阶乘求和
    阶乘求和 只要后9位的话,那就只考虑后9位!如何只算后9位?有一个很经典的运算:取模。回想入门c语言时做过一道题,给定三位数,要求进行数字翻转。比如给定n,n=123,要翻转成321。一个做法是令a1=n%10,a2=(n%100)/10,a3=n/100输出a1*100+a2*10+a3即可。所以遇到求一个很大的值除以某数......
  • P8630 [蓝桥杯 2015 国 B] 密文搜索
    网站:https://www.luogu.com.cn/problem/P8630代码如下:主要是用了map的思想#include<iostream>#include<vector>#include<algorithm>#include<math.h>#include<string>#include<string.h>#include<iomanip>#include<map>#incl......
  • 第十二届蓝桥杯填空题
    目录试题A:卡片法一、暴力测试法法二、另解试题B:直线题解试题C:货物摆放法一、暴力法二、在遍历之前筛掉不是n的因数的试题D:路径法一、改进的迪杰斯特拉算法法二、动态规划试题E:回路计数法一、试题A:卡片分析:11年是从1到2020,2出现的次数,这个题感觉反过来了,求1到多少0-9出现的次数......