蓝桥杯-连接乘积(算法提高)

简介: 蓝桥杯-连接乘积(算法提高)

题目描述:


算法提高  连接乘积  

时间限制:1.0s     内存限制:256.0MB

 

问题描述

 192这个数很厉害,用它分别乘以1、2、3,会得到:

 192  x  1  =  192

 192  x  2  =  384

 192  x  3  =  576

 把这三个乘积连起来,得到192384576,正好是一个1~9的全排列

 我们把上面的运算定义为连接乘积:

 m  x  (1  ...  n)  =  k(其中m  >   0  且  n  >   1,对于上例,m  =  192、n  =  3、k  =  192384576)

 即k是把m分别乘以1到n的乘积连接起来得到的,则称k为m和n的连接乘积。

 按字典序输出所有不同的连接乘积k,满足k是1~9的全排列

输出格式

 每个k占一行

样例输出

显然,结果中应包含一行:

192384576  


程序代码:  


#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#include<algorithm>
using namespace std;
vector<string> ans;
string s[]={"0","1","2","3","4","5","6","7","8","9"};
string ToString(int n)
{
  string ans;
  while(n)
  {
    ans+=s[n%10];
    n/=10;
  }
  reverse(ans.begin(),ans.end());//逆转字符序列 
  return ans;
}
int check(string str)
{
  int vis[10];
  memset(vis,0,sizeof(vis));
  for(int i=0;i<str.size();i++)
    vis[str[i]-'0']++;//记录1到9出现的次数 
  if(vis[0]>0)//如果出现了0,就是不符合题意 
    return 0;
  for(int i=1;i<10;i++)
  {
    if(vis[i]!=1)//只要1到9有一个出现次数不为1 
      return 0;
  }
  return 1;//当且仅当1到9每个都只出现了1次 
}
int main()
{
  for(int i=1;i<9999;i++)
  {
    string str;
    for(int j=1;j<10;j++)
    {
      str=str+ToString(i*j);//C++字符串拼接 
      if(check(str))
      {
        ans.push_back(str);//将每个符合的串str添加到ans之后 
        break;
      }
    }
  }
  sort(ans.begin(),ans.end());//最后直接sort 
  for(int i=0;i<ans.size();i++)
    cout<<ans[i]<<endl;
  return 0;
}


相关文章
|
3月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-246 算法训练 猴子吃包子
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-246 算法训练 猴子吃包子
55 2
|
3月前
|
机器学习/深度学习 算法 Java
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-667 多位数连接
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-667 多位数连接
45 0
|
3月前
|
算法 Java Serverless
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-444 算法训练 求和问题
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-444 算法训练 求和问题
46 1
|
3月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-439 算法训练 简单字符变换
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-439 算法训练 简单字符变换
50 1
|
3月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-49 算法训练 寻找数组中最大值
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-49 算法训练 寻找数组中最大值
45 0
|
15天前
|
自然语言处理 算法 数据挖掘
【数据挖掘】十大算法之PageRank连接分析算法
文章介绍了PageRank算法的基本概念和数学模型,包括如何通过一阶马尔科夫链定义随机游走模型以及如何计算网页的重要性评分,并提供了PageRank迭代算法的具体步骤。
30 0
|
2月前
|
存储 机器学习/深度学习 算法
第十五届蓝桥杯pb组国赛E题[马与象] (15分)BFS算法 详解
第十五届蓝桥杯pb组国赛E题[马与象] (15分)BFS算法 详解
26 3
|
6天前
|
算法
【算法】前缀和——除自身以外数组的乘积
【算法】前缀和——除自身以外数组的乘积
|
11天前
|
算法 Java 索引
LeetCode初级算法题:寻找数组的中心索引+x的平方根+三个数的最大乘积+Leetcode 149:直线上最多的点数 Java详解
LeetCode初级算法题:寻找数组的中心索引+x的平方根+三个数的最大乘积+Leetcode 149:直线上最多的点数 Java详解
21 0
|
2月前
|
人工智能 算法 搜索推荐
蓝桥杯宝藏排序题目算法(冒泡、选择、插入)
以下是内容的摘要: 本文介绍了三种排序算法:冒泡排序、选择排序和插入排序。冒泡排序通过不断交换相邻的逆序元素逐步排序,最坏情况下需要 O(n^2) 次比较。选择排序在每轮中找到剩余部分的最小元素并放到已排序序列的末尾,同样具有 O(n^2) 时间复杂度。插入排序则是将每个元素插入到已排序序列的正确位置,时间复杂度也是 O(n^2),但空间复杂度为 O(1)。