列表

详情


NC21374. 牛牛的表达式

描述

平等友爱同学看到黑板上写了一个表达式a * b = c
表达式可能是错的,平等友爱同学打算修改这个表达式为A * B = C
你的任务是找出满足条件的A,B,C的数量而且使得|A-a| + |B-b| + |C-c|最小

输入描述

输入一行包括三个整数a,b,c (1 ≤ a,b,c ≤ 109)

输出描述

输出一个整数

示例1

输入:

19 28 522

输出:

2

示例2

输入:

10 30 500

输出:

11

示例3

输入:

11111 11111 123454321

输出:

0

示例4

输入:

1000 100 10

输出:

1089

示例5

输入:

399 522 199999

输出:

24

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++11(clang++ 3.9) 解法, 执行用时: 140ms, 内存消耗: 500K, 提交时间: 2020-07-20 15:54:00

#include<bits/stdc++.h>
using namespace std;
int a,b,c;
long long ans,temp;
int main()
{
	cin>>a>>b>>c;
	ans=INT_MAX; 
	for(int C=max(0,c-500);C<=c+500;C++)
	{
		for(int A=1;A*A<=C;A++)
		{
			if(C%A==0)
			{
				temp=abs(A-a)+abs(C/A-b)+abs(C-c);
				ans=min(ans,temp);
				temp=abs(C/A-a)+abs(A-b)+abs(C-c);
				ans=min(ans,temp);
			}
		}
	}
	
	cout<<ans;
	
	return 0;
}

C++(g++ 7.5.0) 解法, 执行用时: 235ms, 内存消耗: 496K, 提交时间: 2023-06-02 16:02:27

#include <iostream>
#include <algorithm>
typedef long long ll;
using namespace std;
#define N 0x3f3f3f3f3f
ll a,b,c,A,B,C,ans=N;
int main(){
	cin>>a>>b>>c;
	for(C=c-300;C<=c+300;C++)
	{
		for(A=1;A*A<=C;A++)
		{
			if(C%A==0){
				ans=min(ans,abs(A-a)+abs(C/A-b)+abs(C-c));
				ans=min(ans,abs(C/A-a)+abs(A-b)+abs(C-c));
			}
		}
	}
	cout<<ans;
	return 0;
} 

上一题