洛谷:P1611 循环的数字

时间限制1.00s         内存限制125.00MB         难易度:普及−

【题目描述】

你曾经因为看见一样的东西一遍又一遍地重复、循环而对电视节目感到厌烦么?好吧,虽然我并不关心电视节目的好坏,不过有时却也很像那样不断循环的数字。

让我们假定两个不同的正整数 (n,m) 是循环的,当且仅当你能通过将 n 末端的几个数字移到它的首端而不改变移动的数字的顺序并使整个数字变成 m 。举个例子,(12345, 34512)(12345,34512) 就是一对循环的数字,因为你能把 1234512345 中末尾的 345345 移到 1212 前面,从而得到 34512。注意,为了成为一对循环的数字,n 和 m 位数必须相同。无论 n 或 m 都没有前置的 0。

现在给定正整数 A 和 B,并保证 A 和 B 位数相同且均没有前置 0,求存在多少循环的正整数对 (n, m),使得 A≤n≤m≤B ?

【输入格式】

本题有共有 10 个测试点。 每个输入文件包含 1 行。 第 1 行有两个用空格隔开的正整数 A 和 B。

【输出格式】

每个输出文件应包含一个正整数 x,表示共有 x 组循环的正整数对 (n,m) 使得 A≤n≤m≤B。

【输入输出样例】

输入 #1

1111 2222

输出 #1

287

【说明/提示】

1≤A,B≤2×10^6。

【算法分析】

这道题有些暴力的成分,首先枚举n,然后将与n循环的m枚举,这样还省了枚举m的时间,防止TLE。

【参考代码】

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int a,b,n,m,ans=0;
	cin>>a>>b;
	for(int i=a;i<b;i++)
	{
		n=i;
		int cnt=0;
		while(n) //求位数。
        {
            cnt++;
            n/=10;
        }
		n=i;
		m=(n%10)*pow(10,cnt-1)+n/10; //根据n的位数求m;
		while(m!=n)
		{
			if(m>n&&m<=b) ans++;
			m=(m%10)*pow(10,cnt-1)+m/10;
		}
	}
	cout<<ans;
	return 0;
}

  • 11
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
洛谷是一个在线的编程竞赛和练习平台,而P1217是洛谷上的一个题目编号。具体来说,P1217是一个关于数字问题的题目,要求编写程序找出给定范围内的所有满足特定条件的数字。 在洛谷P1217题目中,给定了一个范围 [a, b],要求找出这个范围内满足以下条件的数字: 1. 该数字的各位数字之和等于给定的一个常数d。 2. 该数字的各位数字之积等于给定的一个常数s。 你提到的是洛谷P1217java,应该是指使用Java语言来解决这个题目。你可以使用Java编写一个程序,通过遍历范围内的每个数字,判断是否满足条件,然后输出符合条件的数字。 具体的解题思路可以参考以下步骤: 1. 定义范围 [a, b] 和给定的常数d、s。 2. 使用一个循环遍历范围内的每个数字。 3. 对于每个数字,将其转换为字符串,然后遍历字符串中的每个字符,计算各位数字之和sum和各位数字之积product。 4. 判断sum是否等于d,product是否等于s,如果满足条件则输出该数字。 下面是一个简单的Java代码示例,用于解决洛谷P1217题目: ```java public class Main { public static void main(String[] args) { int a = 100; // 范围起始值 int b = 200; // 范围结束值 int d = 5; // 给定的常数d int s = 120; // 给定的常数s for (int num = a; num <= b; num++) { String strNum = String.valueOf(num); int sum = 0; int product = 1; for (int i = 0; i < strNum.length(); i++) { int digit = Character.getNumericValue(strNum.charAt(i)); sum += digit; product *= digit; } if (sum == d && product == s) { System.out.println(num); } } } } ``` 这段代码会输出在范围 [a, b] 内满足条件的数字

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值