番号P2821を変更する問題への解決策[]

序文

この質問は本当に良い質問です。

テキスト

分析

まず第一に、我々は、条件が満たされるべきものを変えるサブの数を考えます。

最高品質係数が超えることはできません。 9 9 中的。

その後、見つけます K K の変更の親最小数 K K から 9 9 2 2 打破します K K 、それを保存し、そして最終的に反出力。

なぜ?

  1. K K 、親の変化の最小数を、私たちの最初の 1 1 できるだけGeをそのビット数が少なく確実にします。

  2. できるだけわずか桁の前提の下で、我々は可能な限り小さく数をしたいです、

#include <bits/stdc++.h>
using namespace std;
int x=9,a[1010],len,l=1;
vector<int>v;
int main(){
	char ch=getchar();
	for(;!isdigit(ch);ch=getchar());
	for(;isdigit(ch);ch=getchar())a[++len]=ch-'0';//读入
	while(x>=2){
		int y=0;
		for(int i=1;i<=len;i++){
			y=y*10+a[i];
			y%=x;
		}
		if(y)x--;//如果不能整除
		else{
			v.push_back(x);//存入
			for(int i=1;i<=len;i++){
				y=y*10+a[i];
				a[i]=y/x;y%=x;//除
			}if(a[l]==0)l++;
		}
	}if(len!=l)puts("There is no such number!");
	else for(int i=v.size()-1;i>=0;i--)cout<<v[i];//反着输出
	return 0;
}

追伸

ご質問がある場合、あなたは、コメント欄でそれを書き留めので、この問題のより完全なソリューションことができます。

公開された41元の記事 ウォン称賛61 ビュー642

おすすめ

転載: blog.csdn.net/qq_46230164/article/details/105313395