6-18 剩余不足问题(*)
幼儿园给 p 位小朋友发 q 颗糖。结果发现:
若每人发 a 颗,则多 b 颗;
若每人发 c 颗,则差 d 颗。
请问:p、q 各为多少?
函数原型
int Surplus(int *p, int *q, int a, int b, int c, int d);
说明:若问题有解,则将小朋友和糖的数量保存到 p 和 q 所指示的变量中,函数值为1(真);否则不改变 p 和 q 所指示的变量,函数值为0(假)。
裁判程序
#include <stdio.h>
int Surplus(int *p, int *q, int a, int b, int c, int d);
int main()
{
int a, b, c, d, p, q;
scanf("%d %d %d %d", &a, &b, &c, &d);
if (Surplus(&p, &q, a, b, c, d))
{
printf("%d %d\n", p, q);
}
else
{
printf("None\n");
}
return 0;
}
/* 你提交的代码将被嵌在这里 */
输入格式
a b c d
输出格式
p q
输入样例1
6 8 8 6
输出样例1
7 50
输入样例2
7 8 10 2
输出样例2
None
C语言解析:
int Surplus(int* p, int* q, int a, int b, int c, int d)
{
int i = b, j = -d, cnt = 0;
if (j < i)
while (j < i)
{
{
i += a, j += c, cnt++;
}
if (i == j)
{
*q = j, * p = (j - b) / a;
return 1;
}
}
else if (i > j)
{
while (i > j)
{
i += a, j += c;
}
if (i == j)
{
*q = j, * p = (j - b) / a;
return 1;
}
}
return 0;
}
灵感来源:城市学院20届新生测试6
侵删