将1到9这九个数字分成三个3位数,要求第一个3位数,正好是第二个3位数的二倍,是第三个3位数的三倍,问应当怎样分。

问题:
*将1到9这九个数字分成三个3位数,要求第一个3位数,正好是第二个3位数的二倍,是第三个3位数的三倍,问应当怎样分。
**输出格式要求:"No.%d: %d %d %d\n"
思路提示:对第一个3位数进行穷举,然后*2,*3分别得到另外两个数。再判断3个数的9个位是否有重复数据(建议把这9个数位分别求出后存入一维数组,再编写一个函数判断一维数组中是否有重复数据。)
 //查找数组中是否有重复的数,并且记录下标:返回1代表有重复,0没有
int find_repet(int arr[], int n)
{
	int num = 0;
	int spot = 0;
	int pos1, pos2;
	for (int i = 0; i < n-1; i++)
	{
		for (int j = i + 1; j < n; j++)
		{
			if (arr[i] == arr[j])//有重复的
			{
				pos1= i;//分别记录下标的位置
				pos2= j;
				num = arr[i];  //记录哪个数字重复了
				spot = 1;//有重复为1
			}
		}
	}
	if (spot == 0)
	{
		return 0;
	}
	else
	{
		//printf("第%d个与第%d个相等,等于%d", pos1, pos2, num);//这里可以输出,以便观察使用
		return 1;
	}
}
void fcc(int* p1, int* p2, int* p3,int n)//函数2:判断九位数是否有重复
{
	int arr[9];//存放数字的数组
	int NU = 0;//计数器
	for (int i = 0;i<n; i++)
	{
		arr[0] = p3[i] % 10;//个位
		p3[i] /= 10;
		arr[1] = p3[i] % 10;//十位
		p3[i] /= 10;
		arr[2] = p3[i] % 10;//百位
		p3[i] = arr[2] * 100 + arr[1] * 10 + arr[0];//还原

		arr[3] = p2[i] % 10;
		p2[i] /= 10;
		arr[4] = p2[i] % 10;
		p2[i] /= 10;
		arr[5] = p2[i] % 10;
		p2[i] = arr[5] * 100 + arr[4] * 10 + arr[3];

		arr[6] = p1[i] % 10;
		p1[i] /= 10;
		arr[7] = p1[i] % 10;
		p1[i] /= 10;
		arr[8] = p1[i] % 10;
		p1[i] = arr[8] * 100 + arr[7] * 10 + arr[6];
		//判断数组中的元素是否有重复
			int flag = find_repet(arr, 9);
			if (flag != 1)//条件判断
			{
				NU++;
				printf("No.%d: %d %d %d\n",NU, p1[i], p2[i], p3[i]);
			}
	}
}
int func(int* p) //函数1:对于1-9构成的三位数进行穷举
{
	int N=0,m= 0,n=0;
	for (int i = 1; i < 10; i++)
	{
		for (int j = 1; j < 10; j++)
		{
			for (int k = 1; k < 10; k++)
			{
				if (i != j && j != k&&i!=k)//三个数字都不相等
				{
					N = i * 100 + j * 10 + k;//算出这个数字
					if (N * 3 < 1000) //这里*3<1000是因为要找的数是三维数
					{
						p[m] = N;
						m++;
						n++;
					}
				}
			}
		}
	}
	return n;
}

int main()
{
	int arr[1000] = { 0 };
	int n = func(arr);//穷举三位数并且得到有多少
	/*printf_arr(arr, n);//这里用来检验数据是否得到
	printf("%d",n);*/
	int brr[1000] = { 0 }, crr[1000] = { 0 };//这两个分别用来装*2和*3后的结果
	for (int i = 0; i < n; i++)
	{
		brr[i] = arr[i] * 2;
		crr[i] = arr[i] * 3;
	}

	fcc(arr, brr, crr,n);//判断是否有重复的,如果没有那么输出
	return 0;
}

以上代码是对于题目的解答.

对于这道题主要由两个函数组成,我写了三个,为了更好看一些,第一个是对于数字的穷举,第二个是判断数组中是否有重复的元素,第三个在第二个基础上得到了九个数字.写成三个是因为,我觉得判断数组中是否有重复元素的函数比较常用,所以详细写了.以上就是我的分享,欢迎大家参考指正

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值