笔试题-二元一次方程求解

点点圈 提交于 2020-02-26 07:35:38

二元一次方程求解

■题目描述
深信服经常给员工发放下午茶,为保证新鲜,下午茶需要当天采
购。
下午茶有水果和面点两种类型,其中水果和面点都有单独的采购
价格,它们的价格都是整数元。
某次,负责采购的阿姨忘记了水果和面点各自的价格,但她保存
了两天的采购的记录:第一天采购了a1份水果, b1份面点,总花费
c1元。第二天采购了a2份水果,b2份面点,总花费c2元。
阿姨希望你帮她计算,水果和面点的实际价格分别是多少。

输入描述:
第一行一个正整数T(T<=100),表示有T组测试数据。
接下来工行,每行6个整数,a1, b1, c1, a2, b2, c2。(所
有数字都>=0且<=1000, 000, 000。它们的意义如题所述)
有50%的数据案例,上述六个数都属于区间 [1, 100];而1008
的数据案例,上述六个数都属 于区间[0, 1e9]。

输出描述:
输出T行。
若对应的测试数据存在唯一的解,并且解正整数解,则输出两个
整数,表示水果和面点的价格。
若存在多解,或者水果和面点的价格可能不是正整数,则输出
UNKNOWN。
(注:只要水果和面点的价格有可能不是正整数,就应输出
UNKNOWN

示例1输入输出示例仅供调试,后台判题数据一般不包含示例

输入
3
1 2 3 4 5 9 
1 2 3 4 5 6
1 2 3 3 6 9
输出
1 1
UNKNOWN
UNKNOWN

代码:

#include <bits/stdc++.h>
using namespace std;

int main()
{
	int j=0,t =0;
	cin>>t;
	list<string> result ;
	while(j++<t)
	{
		float a1,b1,m, a2,b2,c1,c2;
		cin>>a1>>b1>>c1>>a2>>b2>>c2;
		float x=0,y=0;
		
		if(a1*b2-b1*a2==0)//方程有无数解 
    	 {

			result.push_back("UNKNOWN");
    		 continue;
    	 }
		x= (c1*b2 - c2*b1)/(a1*b2 - a2*b1);
        y=(c1*a2 - c2*a1)/(b1*a2 - b2*a1);
		
		if(x<0||y<0||a1*x+b1*y!=c1)
    	 { 

			result.push_back("UNKNOWN");
    		 continue;
    	 }

		
//		整数转化为 string 
		std::ostringstream oss; 
		oss<<x<<" "<< y; 

		result.push_back(oss.str());

		
	}
//输出结果 
	   list<string>::iterator itor;
       itor=result.begin();
       while(itor!=result.end())
       {
          cout<< *itor++<<endl;
       } 
       
    return 0;
}

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!