排位赛(三)| H题

【题目描述】

  满足 f(x)= x 的所有点的集合称为不动点,求 f(x)= (ax)1/2 + b 的所有不动点;

【输入格式】

  第一行一个 t (1 <= t <= 100)表示数据组数;

  接下来 t 行,每行两个数据 a 和 b(-1000 <= a, b <= 1000), 保证该函数至少有一个不动点,且所有不动点均为正数;

【输出格式】

  对于每组数据,第一行输出一个数表示不动点的个数,第二行按从小到大的顺序输出所有的不动点;

【解题思路】

  (1)转化为求解一元二次方程,注意转化过程中满足的一些不等式条件要加到 if 里;

  (2)可以利用求根公式估计解的范围;

  (3)注意尽量不要使用浮点数以及开方这种东西,会产生浮点数误差;

【正确代码】

复制代码
 1 #include <iostream>
 2 
 3 using namespace std;
 4 
 5 int main()
 6 {
 7     int t;
 8     scanf("%d", &t);
 9     
10     int ans[5];
11     
12     while(t --)
13     {
14         int a, b;
15         scanf("%d%d", &a, &b);
16         
17         int cnt = 0;
18         for (int x = b; x <= 3000; x ++)              //x = b来自于转化过程中的不等条件,x <= 3000是利用求根公式估值;
19         {
20             if(x * x - 2 * b * x + b * b == a * x && a * x >= 0) //直接判断是否满足方程,过程不涉及浮点数
21             {
22                 ans[cnt] = x;
23                 cnt ++;
24             }
25         }
26         if(cnt == 1 || (cnt == 2 && ans[0] == ans[1])) printf("1\n%d\n", ans[0]);
27         if(cnt == 2 && ans[0] != ans[1]) printf("2\n%d %d\n", ans[0], ans[1]);    
28     }
29     
30     return 0;
31  } 
复制代码

 

posted @   小菜珠的成长之路  阅读(106)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示