查看原文
其他

C语言每日一练(012)

点击上方「嵌入式大杂烩」,选择「置顶公众号」第一时间阅读编程笔记!

题目

小易有一个圆心在坐标原点的圆,小易知道圆的半径的平方。小易认为在圆上的点而且横纵坐标都是整数的点是优雅的,小易现在想寻找一个算法计算出优雅的点的个数,请你来帮帮他。例如:半径的平方如果为25优雅的点就有:(+/-3, +/-4), (+/-4, +/-3), (0, +/-5) (+/-5, 0),一共12个点。

输入描述与输出描述

输入为一个整数,即为圆半径的平方,范围在32位int范围内。 输出为一个整数,即为优雅的点的个数

示例输入与输出

输入25 输出12

代码

  1. #include <stdio.h>

  2. #include <math.h>


  3. int main(void)

  4. {

  5. int R, r, x, flag = 0, count = 0;


  6. printf("请输入圆半径的平方数:");

  7. scanf("%d",&R);

  8. r = (int)sqrt(R); // 强制转化为整形

  9. /* 判断一个双精度浮点型数据的整数部分是否与其小数部分相等 */

  10. if (r == sqrt(R))

  11. {

  12. flag = 1; // 标记横、纵坐标有0的情况

  13. r -= 1;

  14. }

  15. for ( x = 1; x <= r; x++ ) //坐标没有0的情况:(+/-3, +/-4), (+/-4, +/-3)

  16. {

  17. double y = sqrt( R - x*x );

  18. int y1 = (int)y;

  19. if ( y1 == y )

  20. {

  21. count++;

  22. }

  23. }

  24. count *= 4;

  25. if( 1 == flag ) //坐标有0的情况:(0, +/-5) (+/-5, 0)

  26. {

  27. count += 4;

  28. }


  29. printf("半径的平方为%d的圆的优雅点的个数为:%d\n", R, count);


  30. return 0;

  31. }

分析

(1)找出“ (0, +/-5) (+/-5, 0)”这种情况; (2)找出“(+/-3, +/-4), (+/-4, +/-3)”这种情况。

首先,判断半径平方的算术平方根是否等于其整数部分,如果等于,则存在“ (0, +/-5) (+/-5, 0)”这种情况,使用flag变量标记下来;对于“(+/-3, +/-4), (+/-4, +/-3)”这类情况使用勾股定理进行判断验证,以x为自变量,循环遍历至r-1,求逐一对应的y的值,同样判断其算术平方根是否等于其整数部分,如果等于,则存在“(+/-3, +/-4), (+/-4, +/-3)”这一类情况。最后,算出两类情况的优雅的点的总数。

运行结果

转发、点在看就是对小编最大的支持!


博客网站

zhengnianli.github.io


猜你喜欢

C语言每日一练(007)

C语言每日一练(008)

C语言每日一练(009)

C语言每日一练(010)

C语言每日一练(011)



    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存