首页 > 其他分享 >CF1633A题解

CF1633A题解

时间:2024-01-17 20:12:00浏览次数:33  
标签:10 CF1633A le divisible 题解 number print integer

Div. 7

题面翻译

给定 \(t\) 组数据。

每组数据给定一个数 \(n\)(\(10\le n\le 999\))。

每次操作可以修改 \(n\) 任意一位上的数,将这一位上的数修改为 \(0\sim 9\) 之间的任意数。要求使用最少的修改次数使这个数修改后是 \(7\) 的倍数,并且没有多余的前导 \(0\)。输出修改后的数,如果有多组解,输出任意一种即可。如果已经是 \(7\) 的倍数,那么不需要修改。

题目描述

You are given an integer $ n $ . You have to change the minimum number of digits in it in such a way that the resulting number does not have any leading zeroes and is divisible by $ 7 $ .

If there are multiple ways to do it, print any of them. If the given number is already divisible by $ 7 $ , leave it unchanged.

输入格式

The first line contains one integer $ t $ ( $ 1 \le t \le 990 $ ) — the number of test cases.

Then the test cases follow, each test case consists of one line containing one integer $ n $ ( $ 10 \le n \le 999 $ ).

输出格式

For each test case, print one integer without any leading zeroes — the result of your changes (i. e. the integer that is divisible by $ 7 $ and can be obtained by changing the minimum possible number of digits in $ n $ ).

If there are multiple ways to apply changes, print any resulting number. If the given number is already divisible by $ 7 $ , just print it.

样例

样例输入

3
42
23
377

样例输出

42
28
777

解题思路

题意是让我们改变一个数的某一位数,位数尽可能最低。
因为\(7\)是个位数,因此我们只需要改变一个数的个位,即在\(0-9\)里面选一个数来代替这个数的个位即可。直到这个数能被\(7\)整除为止,如果将\(7\)换为其他个位数也能用这个方法。选数代替个位这个过程我们可以用枚举来完成。

AC代码

#include<iostream>
using namespace std;
int main()
{
	int t, n;
	scanf("%d", &t);
	while (t--) {
		scanf("%d", &n);
		//如果这个数能被7整除,那直接输出它就行
		if (n % 7 == 0)
			printf("%d\n", n);
		else {
			//将n的个位数归零,方便下面枚举替换
			n = n - n % 10;
			//从1开始枚举到9,因为7的倍数里面没有个位为0的情况所以直接不枚举0
			for (int i = 1; i < 10; i++) {
				if ((n + i) % 7 == 0) {
					printf("%d\n", n + i);
					break;
				}
			}
		}
	}
	return 0;
}

标签:10,CF1633A,le,divisible,题解,number,print,integer
From: https://www.cnblogs.com/XiaoWang-554/p/17971068

相关文章

  • CF1637A题解
    SortingParts题面翻译给定一个长度为n的数组a。你可以执行恰好一次操作。每次操作选择一个在[1,n-1]内的整数len,然后将数组a中长度为len的前缀和长度为n-len的后缀分别排序。请判断是否能够通过操作,使得最终的数组a不满足\foralli\in[1,n),a_i<=a(i+1)。数据范......
  • [ARC169E] Avoid Boring Matches 题解
    题目链接首先考虑无解的情况,一个显然的观察是如果R的个数大于一半,那么无论如何都会出现两个R比赛的情况,小于一半时我们可以调整使得B全都在前面,显然有解。接下来问题变为找到最优可行解,但是状态的合法性不是显然的,我们先尝试判定这个问题。先考虑第一轮比赛,显然我们想让......
  • SP839Optimal Marks 题解
    part1:建图二进制异或,每一位互不干扰。所以对每一位分开来考虑。然后变成了一个经典的模型。当前每一个未确定点有两个选择:变成\(1\),变成\(0\);已经确定的点只能选它本身的值。于是构造思路非常套路了:构造虚点\(S\)、\(T\)。对于一个点\(u\),从\(S\)连向\(u\)一条边,值为......
  • ABC311_g One More Grid Task 题解
    题目链接:Atcoder或者洛谷对于解决二维区间内的最值类型问题,我们常常有一类特别好用的方法,就是悬线法,它可以看做是单调栈的子集,但更加好理解和书写。对于悬线法,我们有一个常见的模型,找出面积最大的符合题意的最大的矩形:例题P4147玉蟾宫。对于悬线法而言,我们需要理解什么是悬......
  • P2216 [HAOI2007] 理想的正方形 题解
    题目链接:理想的正方形比较明显的,我们可以用二维ST表解决,具体的二维ST表的实现,只需要知道一点:对于\(st[i][j][t]=max(i\simi+2^t,j\simj+2^t)\),表示的是如图所示的大正方形范围内的最值,它可以拆成从四个小正方形的左端点走\(2^{t-1}\)长的小正方形组成,预处理完直接查......
  • 【深入挖掘Java技术】「源码原理体系」盲点问题解析之HashMap工作原理全揭秘(上)
    知识盲点概念介绍HashMap是基于Map接口构建的数据结构,它以键值对的形式存储元素,允许键和值都为null。由于键的唯一性,HashMap中只能有一个键为null。HashMap的特点是元素的无序性和不重复性。注意,HashMap并不是线程安全的。在多线程环境下,如果不进行适当的同步处理,可能会导致数据不......
  • P9018 [USACO23JAN] Moo Route G 题解
    首先有一些性质。因为保证有解,所以\(a_i\)一定都是\(2\)的倍数(必须一来一回)。并且总的步数应该为\(\suma_i\)。先考虑\(n\le2\)的情况,这时我们可以分情况讨论。因为每一条线段都会被来回走两次,所以我们可以先把每一个数都除以\(2\)。若\(a=b\),则最优情况一定是形......
  • P9017 [USACO23JAN] Lights Off G 题解
    一次操作相当于把\(a\)异或上\(b\),修改开关的一位相当于将这一位异或上\(1\)。会发现一个很神奇的性质:初始开关对灯的影响和改变开关状态对灯的影响是独立的。而前者的影响是固定的,所以我们可以只考虑改变开关状态对灯的影响。假设一共需要\(k\)次操作能使所有灯关闭,如果我......
  • CF1876D Lexichromatography 题解
    Problem-D-CodeforcesLexichromatography-洛谷先注意读题:对于所有的值\(k\),在这个序列的任意子区间\([l,r]\)中,值为\(k\)且为红色的位置数减去值为\(k\)且为蓝色的位置数的绝对值不超过\(1\)注意是任意子区间这说明什么?说明如果只有第二个条件,我......
  • P2572 [SCOI2010] 序列操作 题解
    题解:序列操作比较综合的ds题,综合了线段树常见的几种操作:维护最大子段和、区间翻转、区间求和、区间覆盖。维护子段和常见的我们维护三类东西:前缀最长连续段、后缀最长连续段、当前区间上的最大子段和。在pushUp时,对于一个区间的前后缀最值首先等于左右子树的最长前后缀,......