想好一个大于0的正整数n,将它分别除以3个正整数得到余数,将这几个数与余数告诉计算机,猜出这个数字

首先分析一下这道题,这道题由除数3,5,7变换而来,也主要是为了强化3,5,7 中系数70 ,21, 15 的由来。
强调一下系数的是怎么来的吧。以3,5,7为例 ,进而延伸到此题上。
设需要猜的数字为 X;除数 3,5,7 告诉计算机这个数除以3,5,7得到的余数a,b,c就能给出你心中的数字。
X%3==a; (5 , 7 的系数为3的倍数 同时 a的系数对3求余等于1) S=u+3V+3W;
X%b; (3 , 7 的系数为3的倍数 同时 a的系数对5求余等于1)
X%7
c; (3 , 5 的系数为3的倍数 同时 a的系数对7求余等于1)

把3,5,7,用三个整数替换即可。
同时需要注意一点,三个整数有什么限制。
经过许多测试发现三个数字,假设心中数字是10 ,三个数 为 2 ,5 ,7 余数 0 ,0,3 但是 80满足这个要求 会产生歧义,需要另外条件限制,鄙人才疏学浅 ,这个漏洞 先欠诸位 ,日后大成之后,再补上。见谅~
(这里给出个人看法,三个数不能有公约数 另外还有需要大神指导了)
多说无益,代码走起!

/*
*英文不好 函数命名见谅 依注释来看 
*/
#include<iostream>
using namespace std;
int gbs(int a,int b,int c);   //求三个数最小公倍数   
int f_xs(int a,int b,int c);   //求三个余数的系数    相当于 3,5,7 里的70,21,15	
int max(int a,int b,int c);    //求三个数最大值  以便求最小公倍数
int f_pd(int a,int b);         //判断三个数是否有公约数
int main()
{
	int a,b,c,n,y1,y2,y3;  //  a,b,c代表除数 n代表所要猜的数字   y1 y2 y3 代表余数 
	while(1){
		cout<<"请输入三个除数:"<<endl;
		cin>>a>>b>>c;
		cout<<"请输入三个余数:"<<endl;
		cin>>y1>>y2>>y3;
	if(f_pd(a,b)&&f_pd(b,c)&&f_pd(a,c))
{
	break;
} 
   	else
   	{
 	  	cout<<"您的输入有误,请重新输入"<<endl; 
	   }
	}
	
 	int  x,y,z;
 	
 	x=f_xs(a,b,c);
 	y=f_xs(b,a,c);
 	z=f_xs(c,a,b);
	cout<<x<<" "<<y<<" "<<z<<endl;
	n=x*y1+y*y2+z*y3;
	cout<<gbs(a,b,c)<<endl;
	while(n>100)
	{
		n=n-gbs(a,b,c);
	}
	cout<<"心中的数字是:"<<n<<endl;
	return 0;
}
 
 //求三个数最小公倍数 
int gbs(int a,int b,int c)
{
	int x=max(a,b,c);
	int k,i=1;
	while(1)
	{
		k=x*i;
		if(k%a==0&&k%b==0&&k%c==0)
		break;
		i++;
	}
	return k;
}
 //求三个系数 
int f_xs(int a,int b,int c)
 {
 	int i;
 	for( i=0;i<1000;i++)
	{
		int temp=0;
		if(i%(b*c)==0&&i%a==1)
		temp=1;
		if(temp==1)
		{
			break;
		}
	}
	return i;
 }
 //求三个数最大值 
 int max(int a,int b,int c)
 {
 	int x,temp;
 	x=max(a,b);
 	if(c>x){
 			return c;
	 }
 	return x;
 }
 //判断a,b,c
int f_pd(int a,int b)
 {
 	int m;
 	m=a%b;
 	
 	while(m!=0)
 	{
 		a=b;
 		b=m;
 		m=a%b;
	 }
 	if(b==1){
 			return 1;
	 }
 	return 0;
  } 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值