复试机试练习题【枚举+模拟05】:Old Bill

枚举和模拟

05 Old Bill

描述

在祖父的文件中发现了一张帐单。72只火鸡$?679?显然代表这些火鸡总价的数字的第一位和最后一位在这里被空白(表示为?)取代,因为它们褪色且难以辨认。

两个褪色的数字是多少?一只火鸡的价格是多少?我们想编写一个程序来解决上述问题的一般版本。

N只火鸡$?XYZ?火鸡的总数N在1到99只之间,包括两者。

总价最初由五位数组成,但我们只能看到在中间的三位数。

我们假设第一个数字是非零的,一只火鸡的价格是整数美元,所有火鸡的价格都是相同的。

给定N、X、Y和Z,编写一个程序来猜测两个褪色的数字和原始价格。

如果原始价格有多个候选者,则输出应该是最昂贵的一个。

也就是说,该计划将报告火鸡的两个褪色数字和每只火鸡的最高价格。

输入描述

输入文件的第一行包含一个整数N(0<N<100),表示火鸡的数量。在下面的行中,有原始价格$?XYZ?的三个十进制数字X、Y和Z,用空格分隔。

输出描述

对于每种情况,输出两个褪色的数字和火鸡每只火鸡的最高价格。

示例1

输入:

72
6 7 9
5
2 3 7
78
0 0 5

输出:

3 2 511
9 5 18475
0

解答

#define _CRT_SECURE_NO_WARNINGS
#include
using namespace std;
#include


//数组变量本身存储的就是一串地址
//所以要返回数组 其实就是返回一个地址
int* Huoji(int n, int num2, int num3, int num4) {
	//使用指针定义数组
	int arr[3];


	int price;//总价格 用于遍历
	int maxprice = 0;//用于记录最高的价格

	int num1, num5;


	//循环遍历所有情况 i表示num1 j表示num5
	for (int i = 1; i <= 9; i++) {
		for (int j = 0; j <= 9; j++) {
			price = i * 10000 + num2 * 1000 + num3 * 100 + num4 * 10 + j;

			//如果可以整除 就说明可行
			//但是还要选择最高的
			if (price % n == 0) {

				//判断是否是当前最高价格
				if (price >= maxprice) {
					maxprice = price;

					num1 = i;
					num5 = j;

				}
			}

		}
	}
	//如果没有符合条件的 那么maxprice还是0
	if (maxprice == 0) {
		arr[0] = 0;
		return arr;
	}

	arr[0] = num1;
	arr[1] = num5;
	arr[2] = maxprice / n;

	return arr;
}




int main() {
	//如何接受用户输入
	//又是一个统一输入 统一输出的题目
	//先写一个输入两行输出一行的
	//文件的末尾自己就有EOF这个指示符

	/*
		备注

		这里最终经过测试 还是一组一组的来的
		
		注意区分 是一组一组来 还是等待所有输入完成后再统一输出

	*/



	/*
		输入样式

		72
		6 7 9
	*/


	/*
		输出样式

		3 2 511
	*/


	//还是想到先写一个函数


	int n;//接收火鸡个数
	int num2, num3, num4;//接收中间的位数

	scanf("%d %d %d %d", &n, &num2, &num3, &num4);
	int* arr = Huoji(n, num2, num3, num4);

	if (arr[0] != 0) {
		printf("%d %d %d\n", arr[0], arr[1], arr[2]);
	}
	else {
		printf("%d", arr[0]);
	}
	return 0;
}

你可能感兴趣的:(算法,c语言,开发语言,考研)