111,125
社区成员
发帖
与我相关
我的任务
分享
void test(int a, int b, int c) {
//swap a,b resut = a > b
if(a < b){
int k = b;
b = a;
a = k;
}
int m = 1,n = 0;
if (c % a == 0 || c % b == 0) {
Debug("OK");
return;
}
// n = 1, m >= 1
m = 1;
while (c > m * a - b) {
if (c % (m * a - b) == 0) {
Debug(string.Format("{0} * {1} - {}2",m,a,b));
return;
}
m++;
}
//m = 1,n >= 1
n = 1;
while (c > a - n*b && a - n*b > 0) {
if (c % (a - n*b) == 0) {
Debug(string.Format("{0} - {1} * {2}",a,n,b));
return;
}
n++;
}
//-------------------------
// m = 1,n >= 1
n = 1;
while (c > a + n*b) {
if (c % (a + n*b) == 0) {
Debug(string.Format("a + n*b = {0} + {1}* {2}",a,n,b));
return;
}
n++;
}
//3 n = 1, m >= 1
m = 1;
while (c > m*a + b ) {
if (c % (m*a + b) == 0) {
Debug(string.Format("m*a + b = {0}*{1} + {2}",m,a,b));
return;
}
m++;
}
Debug("无解");
}
void Debug(string s) {
MessageBox.Show(s);
}
//-------------------------
// m = 1,n >= 1
n = 1;
while (c > a + n*b) {
if (c % (a + n*b) == 0) {
Debug(string.Format("a + n*b = {0} + {1}* {2}",a,n,b));
return;
}
n++;
}
void test(int a, int b, int c) {
//swap a,b resut = a > b
if(a < b){
int k = b;
b = a;
a = k;
}
int m = 1,n = 0;
if (c % a == 0 || c % b == 0) {
Debug("OK");
return;
}
// n = 1, m >= 1
m = 1;
while (c > m * a - b) {
if (c % (m * a - b) == 0) {
Debug(string.Format("{0} * {1} - {}2",m,a,b));
return;
}
m++;
}
//m = 1,n >= 1
n = 1;
while (c > a - n*b && a - n*b > 0) {
if (c % (a - n*b) == 0) {
Debug(string.Format("{0} - {1} * {2}",a,n,b));
return;
}
n++;
}
//-------------------------
// m = 1,n >= 1
n = 1;
while (c > a - n*b) {
if (c % (a - n*b) == 0) {
Debug(string.Format("a - n*b = {0} - {1}* {2}",a,n,b));
return;
}
n++;
}
//3 n = 1, m >= 1
m = 1;
while (c > m*a + b ) {
if (c % (m*a + b) == 0) {
Debug(string.Format("m*a + b = {0}*{1} + {2}",m,a,b));
return;
}
m++;
}
Debug("无解");
}
void Debug(string s) {
MessageBox.Show(s);
}
倒满3升杯子
从3升杯子向7升杯子倒水
倒满3升杯子
从3升杯子向7升杯子倒水
倒满3升杯子
从3升杯子向7升杯子倒水
倒满3升杯子
倒空3升杯子
从7升杯子向3升杯子倒水
倒空3升杯子
从7升杯子向3升杯子倒水
倒空3升杯子
从7升杯子向3升杯子倒水
从3升杯子向20升杯子倒水
倒满3升杯子
从3升杯子向7升杯子倒水
倒满3升杯子
从3升杯子向7升杯子倒水
倒满3升杯子
从3升杯子向7升杯子倒水
倒满3升杯子
倒空3升杯子
从7升杯子向3升杯子倒水
倒空3升杯子
从7升杯子向3升杯子倒水
倒空3升杯子
从7升杯子向3升杯子倒水
从3升杯子向20升杯子倒水
倒满3升杯子
从3升杯子向7升杯子倒水
倒满3升杯子
从3升杯子向7升杯子倒水
倒满3升杯子
从3升杯子向7升杯子倒水
倒满3升杯子
倒空3升杯子
从7升杯子向3升杯子倒水
倒空3升杯子
从7升杯子向3升杯子倒水
倒空3升杯子
从7升杯子向3升杯子倒水
从3升杯子向20升杯子倒水
倒满3升杯子
从3升杯子向7升杯子倒水
倒满3升杯子
从3升杯子向7升杯子倒水
倒满3升杯子
从3升杯子向7升杯子倒水
倒满3升杯子
倒空3升杯子
从7升杯子向3升杯子倒水
倒空3升杯子
从7升杯子向3升杯子倒水
倒空3升杯子
从7升杯子向3升杯子倒水
从3升杯子向20升杯子倒水
倒满3升杯子
从3升杯子向7升杯子倒水
倒满3升杯子
从3升杯子向7升杯子倒水
倒满3升杯子
从3升杯子向7升杯子倒水
倒满3升杯子
倒空3升杯子
从7升杯子向3升杯子倒水
倒空3升杯子
从7升杯子向3升杯子倒水
倒空3升杯子
从7升杯子向3升杯子倒水
从3升杯子向20升杯子倒水
倒满3升杯子
从3升杯子向7升杯子倒水
倒满3升杯子
从3升杯子向7升杯子倒水
倒满3升杯子
从3升杯子向7升杯子倒水
倒满3升杯子
倒空3升杯子
从7升杯子向3升杯子倒水
倒空3升杯子
从7升杯子向3升杯子倒水
倒空3升杯子
从7升杯子向3升杯子倒水
从3升杯子向20升杯子倒水
倒满3升杯子
从3升杯子向7升杯子倒水
倒满3升杯子
从3升杯子向7升杯子倒水
倒满3升杯子
从3升杯子向7升杯子倒水
倒满3升杯子
倒空3升杯子
从7升杯子向3升杯子倒水
倒空3升杯子
从7升杯子向3升杯子倒水
倒空3升杯子
从7升杯子向3升杯子倒水
从3升杯子向20升杯子倒水
倒满3升杯子
从3升杯子向7升杯子倒水
倒满3升杯子
从3升杯子向7升杯子倒水
倒满3升杯子
从3升杯子向7升杯子倒水
倒满3升杯子
倒空3升杯子
从7升杯子向3升杯子倒水
倒空3升杯子
从7升杯子向3升杯子倒水
倒空3升杯子
从7升杯子向3升杯子倒水
从3升杯子向20升杯子倒水
倒满3升杯子
从3升杯子向7升杯子倒水
倒满3升杯子
从3升杯子向7升杯子倒水
倒满3升杯子
从3升杯子向7升杯子倒水
倒满3升杯子
倒空3升杯子
从7升杯子向3升杯子倒水
倒空3升杯子
从7升杯子向3升杯子倒水
倒空3升杯子
从7升杯子向3升杯子倒水
从3升杯子向20升杯子倒水
倒满3升杯子
从3升杯子向7升杯子倒水
倒满3升杯子
从3升杯子向7升杯子倒水
倒满3升杯子
从3升杯子向7升杯子倒水
倒满3升杯子
倒空3升杯子
从7升杯子向3升杯子倒水
倒空3升杯子
从7升杯子向3升杯子倒水
倒空3升杯子
从7升杯子向3升杯子倒水
从3升杯子向20升杯子倒水
倒满3升杯子
从3升杯子向7升杯子倒水
倒满3升杯子
从3升杯子向7升杯子倒水
倒满3升杯子
从3升杯子向7升杯子倒水
倒满3升杯子
倒空3升杯子
从7升杯子向3升杯子倒水
倒空3升杯子
从7升杯子向3升杯子倒水
倒空3升杯子
从7升杯子向3升杯子倒水
从3升杯子向20升杯子倒水
using System;
namespace ConsoleApplication4
{
class Program
{
static void Main(string[] args)
{
int a = 1597, b = 2584, c = 198787;
long countA, countB;
int gcd = EuclidExtend(a, b, out countA, out countB);
int K = c / gcd;
if (c != K * gcd)
{
Console.WriteLine("无解");
return;
}
countA *= K; countB *= K; a /= gcd; b /= gcd;
int temp = a > b ? (int)Math.Abs(countB / a) : (int)Math.Abs(countA / b);
int flag = countA < 0 ? 1 : -1;
long minA = 0, minB = 0, minSum = int.MaxValue;
for (int i = temp - 1; i <= temp + 1; i++)
{
long sum = Math.Abs(countA + (i * b) * flag) + Math.Abs(countB - (i * a) * flag);
if (sum < minSum)
{
minA = countA + (i * b) * flag;
minB = countB - (i * a) * flag;
minSum = sum;
}
}
Console.WriteLine("{0} = ({1}*{2}) + ({3}*{4})", c, a * gcd, minA, b * gcd, minB);
}
public static int EuclidExtend(int X, int Y, out long A, out long B)
{
if (Y == 0) { A = 1; B = 0; return X; }
int quotient = X / Y;
int gcd = EuclidExtend(Y, X - Y * quotient, out A, out B);
long Temp = A; A = B; B = Temp - quotient * A;
return gcd;
}
}
}