编程之美-找符合条件的整数
来源:互联网 发布:淘宝网男士耐克运动鞋 编辑:程序博客网 时间:2024/05/16 09:16
问题:任意给定一个正整数N,求一个最小的正整数M,使得N*M的十进制表示形式中只含有1和0,
先证明这样的M是存在的。
下面给出如何求解这样的M呢?代码中主要由find()函数实现的,假若N=3,给出求解过程:
其思想就是在中找出N个最小的相等的数,然后它们的和就满足M*N的要求。
其求解是:由底向上求解,number:保存数,mod保存余数。
(1)先将1放入number中,1modN放入mod中。
(2)然后判断2位数10、11中是否会产生新的余数
(3)然后再判断三位数中(100和number中的数相加组成的三维数)是否产生新的余数
(4).....
N=3为例:
一位数
num=1:number{1};mod{1}
二位数
num=10:num%N==1,没有产生新的余数,不对number、mod进行操作
判断10和一位数组成的新二位数是否产生新余数即:(num%N+mod[i])%N是否在mod中是新数)11%3=2
所以number{1,11};mod{1,2}
三位数
num=100:num%N=1,没产生新的余数,不对number、mod进行操作
判断100和number中的一位、二位数组成新的三位数是否产生新的余数,100+number[0]=101modN=2没产生新余数,不对number、mod进行操作。100+number[1]=111modN=0产生新的余数,同时为0 ,循环停止,找到满足条件的数。number{1,11,111};mod{1,2,0}
有人可能会问在三位数中为什么没对110进行判断,难道就这么肯定不会产生新的余数?
其实可以看看110的组合它是由100+10进行组合的,由于10modN与1modN二,而被丢弃。那么可知100+1肯定与100+10的余数相同。
FindNum.h
#pragma once#include<iostream>#include<vector>using namespace std;class Num{public:Num(int n);void find();bool contains(int m);void show();private:int N;vector<long long> number;vector<int> mod;};
FindNum.cpp
#include"stdafx.h"#include"FindNum.h"#include<iostream>#include<vector>using namespace std;Num::Num(int n){N=n;}void Num::find(){long long num=1;int m;m=num%N;mod.push_back(m);number.push_back(num);while(m){num*=10;m=num%N;int n=mod.size();if(!contains(m)){mod.push_back(m);number.push_back(num);}if(m==0)return ;for(int i=0;i<n;i++) //注意此处的循环,当位数为k+1时,n保存的是k位时mod中的余数个数{m=(num%N+mod[i])%N;if(!contains(m)) //在寻找是否和前面的余数相重复,实时的更新mod中满足条件的余数。{mod.push_back(m);number.push_back(num+number[i]);}if(m==0)return;}}}bool Num::contains(int m){for(int i=0;i<mod.size();i++)if(m==mod[i])return true;return false;}void Num::show(){find();int n=number.size()-1;long long M=number[n]/N;cout<<"最小的符合条件的整数为:"<<M<<endl;}
Beauty-2.8.cpp
// Beauty-2.8.cpp : 定义控制台应用程序的入口点。////编程之美-找符合条件的整数:给定任意一个整数N,求一个最小的正整数M>1,使得N*M十进制表示只含有0、1#include "stdafx.h"#include"FindNum.h"#include<iostream>#include<vector>using namespace std;int _tmain(int argc, _TCHAR* argv[]){int N;cout<<"Input N"<<endl;cin>>N;Num a(N);a.show();return 0;}
- 编程之美——找符合条件的整数
- 编程之美2.8 找符合条件的整数
- 编程之美——找符合条件的整数
- 编程之美-找符合条件的整数
- 编程之美——找符合条件的整数
- 【编程之美2.8】找符合条件的整数
- 编程之美——找符合条件的整数
- 编程之美2.8找符合条件的整数
- 编程之美-找符合条件的整数
- 编程之美:找符合条件的整数
- [编程之美] PSet2.8 找符合条件的整数
- 编程之美2.8 找符合条件的整数
- 编程之美2.8 找符合条件的整数
- 编程之美——找符合条件的整数
- 编程之美2.8找符合条件的整数
- 编程之美2.8 找符合条件的整数
- 0711编程之美找符合条件的整数
- 读书笔记之编程之美 – 2.8 找符合条件的整数
- 解决方法:An error occurred on the server when processing the URL. Please contact the system administrato
- Tomcat ClassLoader机制介绍
- 设计模式-迭代器模式
- Android学习日记(2)
- Ajax.BeginForm返回方法OnSuccess
- 编程之美-找符合条件的整数
- 如何启用.NET中的Fusion Log
- HDU 2080 夹角有多大
- 给定能随机生成整数1到5的函数,写出能随机生成整数1到7的函数(google题目)
- 20+个创意十足的斜线网站设计
- python包管理工具pip
- VS2012安装后很卡,需要大化小化窗口
- linux网络编程之POSIX 共享内存和 系列函数
- PRJ:Detect a point if it's inside a triangle