注册 登录
  • 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!
  • 由于近期流量激增,小站的ECS没能经的起亲们的访问,本站依然没有盈利,如果各位看如果觉着文字不错,还请看官给小站打个赏~~~~~~~~~~~~~!

C语言求解100的带分数形式

OC/C/C++ 水墨上仙 1242次浏览 已收录 手机上查看

100 可以表示为带分数的形式:100 = 3 + 69258 / 714 还可以表示为:100 = 82 + 3546 / 197 注意特征:带分数中,数字1~9分别出现且只出现一次(不包含0)。 类似这样的带分数,100 有 11 种表示法。

#include
#include
/*检查某个数是否出现重位的情况,可以与nKill整合,但这儿单独列出*/
bool checkNum(int n){
	char arr[]="x123456789";
	do{
		if(arr[n%10]<='9'){
			arr[n%10]='x';
		}else{
			return false;
		}
		n/=10;
	}while(n!=0);
	return true;
}
/*去除数组中已出现过的数字*/
void nKill(int n,char * arr){
	do{
		//标记已被选
		arr[n%10]='#';
		n/=10;
	}while(n!=0);
}
/*交换两个数*/
void change(char *a,char *b){
	char tmp;
	tmp=*a;
	*a=*b;
	*b=tmp;
}
/*字符串逆序*/
void start2End(char * arr){
	int len=strlen(arr),i;
	for(i=0;i<len/2;i++){ change(arr+i,arr+len-i-1); } } /*集合全排列*/ bool nextArr(char * arr,int len){ int i,j; //寻找第一个左边比右边小的数 for(i=len-1;i>0;i--){
		if(arr[i]>arr[i-1]){
			break;
		}
	}
	//如果找不到波动了,也就意味着找完了
	if(i==0){
		return false;
	}
	i--;
	//寻找右边第一个比i处值大的
	for(j=len-1;j>i;j--){
		if(arr[j]>arr[i]){
			break;
		}
	}
	//交换
	change(arr+i,arr+j);
	//倒序
	start2End(arr+i+1);
	return true;
}
/*字符串转数字*/
int str2N(char *arr,int len){
	int count=0,i=0;
	char ch;
	while(i!=len){
		count=count*10+(arr[i++]-'0');
	}
	return count;
}
/*遍历寻找填入/的位置*/
bool insert(char *res,int len,int result,int n){
	int i,a,b;
	for(i=len/2;i<len;i++){
		a=str2N(res,i);
		b=str2N(res+i,len-i);
		//printf("%d/%d\n",a,b);
		if(a/b==result && a%b==0){
			printf("%d+%d/%d\n",n,a,b);
			return true;
		}
	}
	return false;
}
/*计算核心*/
void fun(int n,int result){
	//1~9的全排列
	char arr[]="#123456789";
	char res[10];
	nKill(n,arr);
	int i=0,j=0;
	char ch;
	while((ch=arr[i++])!='\0'){
		if(ch!='#'){
			res[j++]=ch;
		}
	}
	res[j]='\0';
	do{
		insert(res,j,result,n);
	}while(nextArr(res,j));
}
void main(){
	int i,n,tmp;
	scanf("%d",&n);
	for(i=1;i<n;i++){
		tmp=n-i;
		if(checkNum(tmp)){
			fun(n-i,i);
		}
	}
}


开心洋葱 , 版权所有丨如未注明 , 均为原创丨未经授权请勿修改 , 转载请注明C语言求解100的带分数形式
喜欢 (0)
[开心洋葱]
分享 (0)
水墨上仙
关于作者:
水墨上仙
……
加载中……