首页 > 其他分享 >东华大学oj n的倍数

东华大学oj n的倍数

时间:2024-11-09 10:16:34浏览次数:3  
标签:10 运算 明明 测试数据 爸爸 倍数 东华大学 oj

N的倍数

时间限制: 2s

类别: 函数->中等

问题描述

明明的爸爸在研究一个复杂的数学问题,研究了很长时间都没有结果。明明看见后就问爸爸在研究什么。明明的爸爸回答说:“我在研究一个整数的倍数问题,想找到某个数的倍数……”明明还没有等他爸爸说完,就抢着说:“这不是很简单嘛,你把这个整数乘以1,乘以2,……,就能得到很多的倍数呀。”明明的爸爸当然知道这种方法,但是他接着说:“这样的方法找倍数当然容易,但是我找的倍数有一个特点,那个倍数只能由0或1组成,且应该尽量的小。例如一个自然数2,它符合要求的那个倍数就是10。”这下明明明白为什么爸爸研究了那么多时间都还没有研究出结果了,因为随着数字的增大,找到它的符合要求的倍数越来越难。明明想帮他爸爸解决这个问题,于是他来求助于你,能否帮他爸爸写一个程序,来求一个整数的倍数,倍数仅有0或1组成,且要尽可能小。 明明的问题可以归结为:任意给定一个自然数N,寻找一个M,要求M是N的倍数,且它的所有各位数字都是由0或1组成,并要求M尽可能小。

输入说明

你写的程序要求从标准输入设备中读入测试数据作为你所写程序的输入数据。标准输入设备中有多组测试数据,每组测试数据仅占一行,每行仅包括一个正整数N(1≤N≤100),代表要求倍数的那个整数。每组测试数据与其后一组测试数据之间没有任何空行,第一组测试数据前面以及最后一组测试数据后面也都没有任何空行。

输出说明

对于每一组测试数据,你写的程序要求计算出一组相应的运算结果,并将这一组运算结果作为你所写程序的输出数据依次写入到标准输出设备中。每组运算结果为一个整数,即N的倍数M。每组运算结果单独形成一行数据,其行首和行尾都没有任何空格,每组运算结果与其后一组运算结果之间没有任何空行,第一组运算结果前面以及最后一组运算结果后面也都没有任何空行。 注:通常,显示屏为标准输出设备。

#include<iostream>
using namespace std;
bool rate(int n)
{
	while (n)
	{
		if (n % 10 != 1 && n % 10 != 0)return 0;
		n /= 10;
	}
	return 1;
}
int main()
{
	int n;
	while (cin >> n)
	{
		for (int i = 1;; i++)
		{
			if (rate(i)&&i%n==0)
			{
				cout << i << endl; break;
			}
		}
	}
	return 0;

}

这里采取的是一一列举的方法,但如果你喜欢测试一下的话,你会发现99为什么跑不出来呢。这个代码之所以能过是因为 对于数值会很大的案例 测试用例中没有,所以可以枚举,但是如果有这个数呢,大家可以想想怎么办 我是采用的递归 但因为层数过多 re和tle.

递归思想

如果你只是想a了这道题 上面的方法已经够用了,

#include<iostream>
#include<math.h>
using namespace std;
//这个函数的整体思路为  比如 1 此时所有位数都是1 再大就是10 
//如果 10 不行 下一个找 11 若11不行 此时所有位数都是1 变为100
//然后 100不行 101 101不行 111 然后1000 大概这个思路
void shu(long long n,long long x=1)//x代表的就是 由0和1组成的数字。
{
	if (x % n == 0)
	{
		cout << x << endl;
		return;
	}
	//如果能除就return
	int len = 0;
	long long t = x;
	while (t)
	{
		if (t % 10 == 0)
		{
			x += pow(10, len);
			break;
		}
		t /= 10;
		len++;
	}//判断有没有位数上面还是0 如果还有 0 就给x 上面加上去1 
	if (t != 0)shu(n, x);
	//这里加一之后应该从新判断了于是递归
	else shu(n, pow(10, len));
	//如果全是1 就增加一位数 除了最高位都是0.

}
int main()
{
	long long n;
	while (cin >> n)
	{
		shu(n);
	}

}

这段代码不会全部ac 因为到了后面递归次数多了 虽然数据要比枚举少这是一定的 但是函数层层铺开占用的空间是很大的 所以使用于小的数据

思想见代码注释

标签:10,运算,明明,测试数据,爸爸,倍数,东华大学,oj
From: https://blog.csdn.net/2401_87517331/article/details/143492785

相关文章

  • 每日OJ题_牛客_BC157素数回文_数学_C++_Java
    目录牛客_BC157素数回文_数学题目解析C++代码Java代码牛客_BC157素数回文_数学素数回文_牛客题霸_牛客网描述:现在给出一个素数,这个素数满足两点:1、  只由1-9组成,并且每个数只出现一次,如13,23,1289。2、  位数从高到低为递减或递增,如2459,87631。请你判断一下,这......
  • clean-java-project-structure-实现秒杀系统
    clean-java-project-structure-意在clean&standard断WAN手撕了一个平平无奇的秒杀系统,crud过载,赶紧多看看源码缓缓秒杀系统实现-前言在互联网高速发展的时代,电商平台的各种促销活动层出不穷,其中“秒杀”活动以其低价、限时、限量的特点吸引了大量用户,成为电商平台吸......
  • Regex 历史 / 规范 / 流派 | JavaScript 匹配 emoji
    注:本文为几篇regex相关合辑。机翻,未校,未整理。RegexHistoryandHow-ToCrystalVillanuevaJan14,2021Aregularexpression,alsoknownasregexorregexp,isaspecialstringthatpresentsitselfrepeatedlyinasearchpattern;today,programmersuse......
  • 题解:[BZOJ2958] 序列染色
    ProblemLinkBZOJ2958序列染色题意给出一个长度为\(n\),由\(\ttB,W,X\)三种字符组成的字符串\(S\),你需要把每一个\(\ttX\)染成\(\ttB\)或\(\ttW\)中的一个。Solution字符串,染色,方案数,一眼\(dp\)。要求前半段是B,后半段是W。考虑容斥。\(f_{i,0/1},g_{i,......
  • 信奥OJ的搭建
    第一步,服务器申请选择一:免费云服务器,免费虚拟主机如:阿贝云阿贝云提供了免费的云服务器和免费的云虚拟主机,可根据自己的实际应用情况选择。首先注册一个账户,然后需要支付0.3元做一个实名认证,如果实名认证成功了大概率会开通成功。如果失败了可能是服......
  • POJ3481 Double Queue (map)
     使用map,并将优先级值放在first以自动排序,如果输入的代码为2,就输出最后一组元素的second并删去,输入代码为3时同理。#include<iostream>#include<map>#include<vector>usingnamespacestd;intmain(void){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);......
  • lanqiaoOJ 1110:小王子单链表 ← 数组模拟实现
     【题目来源】https://www.lanqiao.cn/problems/1110/learning/【题目描述】小王子有一天迷上了排队的游戏,桌子上有标号为1-10的10个玩具,现在小王子将他们排成一列,可小王子还是太小了,他不确定他到底想把哪个玩具摆在哪里,直到最后才能排成一条直线,求玩具的编号。已知他排......
  • 数据结构 ——— 链式二叉树oj题:相同的树
    目录题目要求手搓两个链式二叉树代码实现 题目要求给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。手搓两个链式二叉树代码演示://数据类型typedefintBTDataType;......
  • LOJ6119 「2017 山东二轮集训 Day7」国王
    题意给定一颗树,每个点有权值\(1\)和\(-1\),称一条路径是好的当且仅当路径上所有点的权值和为\(0\)。求连续编号区间\([l,r]\)使得两个点都在\([l,r]\)的好路径比两个点都不在\([l,r]\)的好路径数严格多的方案数。\(n\le10^5\)。Sol两个端点都在区间内不好做,......
  • qoj8542 Add One 2
    大概是把官方题解再说一遍。注意到,给\(k\)个数加一的代价为\(k\)。定义一个序列\(S\)合法当且仅当:对于初始为全\(0\)的序列\(B\),可以通过对\(B\)进行多次给定的两种操作得到\(S\)。可以把题意转化为:给定序列\(A\),对于所有合法序列\(S\),且\(\foralliS_i\geqA_......