青少年编程知识记录 codecoming

【题解】盈亏问题

【题目描述】

一群人团购一件物品:

如果每人出 a元,所付总金额比物价多出了x 元;

如果每人少出 1元,也就是每人出a-1元,所付总金额比物价少了y元。

给定 a,x,y求参与团购的人数及该物品的价格。

【输入描述】

单独一行:三个整数:a,x及y

【输出描述】

单独一行:两个整数。第一个整数表示参与的人数,第二个整数表示物品的价格,中间用一个空格分开。

【样例输入】

8 3 4

【样例输出】

7 53

【数据范围】

  • 1≤a≤1000

  • 1𝑥10001≤x≤1000

  • 1𝑦10001≤y≤1000



这个问题可以通过设定方程组求解来解决。设 n 为人数,p 为物品的价格。  根据题目描述:  如果每个人出 a 元,总金额为 n * a,比物品的价格多了 x 元,即 n * a = p + x。  如果每个人出 a-1 元,总金额为 n * (a - 1),比物品的价格少了 y 元,即 n * (a - 1) = p - y。  我们可以通过解这两个方程来求解 n 和 p。
#include <iostream>  using namespace std;    int main() {      int a, x, y;      cin >> a >> x >> y;        // 方程一: n * a = p + x      // 方程二: n * (a - 1) = p - y            // 通过消去法解方程组      // 设 p = n * a - x 代入第二个方程:      // n * (a - 1) = n * a - x - y      // 化简可得:      // n * (a - 1) = n * a - x - y      // n * a - n = n * a - x - y      // - n = - x - y      // n = x + y        int n = x + y;      int p = n * a - x;        cout << n << " " << p << endl;        return 0;  }





方法二:直接用循环模拟

#include <iostream>  using namespace std;    int main() {      int a, x, y;      cin >> a >> x >> y;  	int n,p;      // 方程一: n * a = p + x      // 方程二: n * (a - 1) = p - y          	for(n=1;;n++){    		p=a*n-x;    		if((a-1)*n==p-y){    			cout << n << " " << p << endl;    			return 0;  		}  	}                return 0;  }



(adsbygoogle = window.adsbygoogle || []).push({});

作者:亿万年的星光 分类:C++知识 浏览: