本文主要是介绍东秦oj1103 k尾相同数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目
题目描述
已知自然数K,若存在自然数M和N(M>N),使得KM和KN均大于或等于1000,且它们的末三位数相等,则称M和N是一对“K尾相等数”请编写一个程序,输出M+N值最小的K尾相等数。
输入描述
输入多组数据,每组一个K.(K>1)
输出描述
输出满足条件中的最小的M+N的值,每组数据一行。
样例输入
2
样例输出
120
代码
#include<iostream>
#include<algorithm>
#include<vector>
#include<cstring>
using namespace std;
const int N = 1010;
int n;
vector<int> vec[N];
int q[N];
int main(){while(scanf("%d",&n)!=-1){for(int i=0;i<N;i++){vec[i].clear();}memset(q,0,sizeof q);bool flag = false;q[0] = 1;if(n>1000) flag = true, n%=1000;for(int i=1;i<N;i++){q[i] = (q[i-1] * n) % 1000;if(q[i-1] * n >= 1000) flag = true;if(flag) vec[q[i]].push_back(i);if(vec[q[i]].size()>1) {cout<<(vec[q[i]][0]+vec[q[i]][1])<<endl;break; }}// for(int i=0;i<N;i++) sort(vec[i].begin(),vec[i].end());
//
// int res = 2e9;
// for(int i = 0;i<N;i++) if(vec[i].size()>1) res = min(res,vec[i][0]+vec[i][1]);// printf("%d\n",res);}
}
这篇关于东秦oj1103 k尾相同数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!