本文主要是介绍Codeforces 1633 A. Div. 7 —— 简单思维,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
This way
题意:
给你一个数,你可以改变它每一位上的数,但是不能有前导零问你最少需要改变的位数使得它变成7的倍数。问你改之后值是多少。
题解:
最简单的方法:枚举暴力,下面也贴出来此代码。
但是非常非常的愚蠢,写这代码的时间别人b题都可以开始敲了,脑子得活一点
假设n%7=x,个位上的数是a,那看a+x是否可行,如果不可行,也就是说a+x>9
那么a-(7-x)=a-7+x
可知它>2,也就是我们要么在个位上加或者减即可。
#include<bits/stdc++.h>
using namespace std;
int main()
{int t;scanf("%d",&t);while(t--){int n;scanf("%d",&n);int res=n%7;if(!res){printf("%d\n",n);continue;}int a[]={n%10,n/10%10,n/100};int top=2,mi=4,ans=0;while(!a[top])top--;for(int i=7;i<=999;i+=7){int b[]={i%10,i/10%10,i/100};int top1=2;while(!b[top1])top1--;if(top1!=top)continue;int num=0;for(int j=0;j<=top;j++)if(a[j]!=b[j])num++;if(num<mi)mi=num,ans=i;}printf("%d\n",ans);}return 0;
}
这篇关于Codeforces 1633 A. Div. 7 —— 简单思维的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!