时间限制:1秒空间限制:32768K热度指数:68123

算法知识视频讲解

题目描述

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

输入描述:

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

输出描述:

输出为一个整数,即为优雅的点的个数
示例1

输入

25

输出

12

编程要有良好的思维(这点目前我还有差距),不能看到题目直接上手打(除非很大把握一次性做对),要逐步分析。
首先要读懂题意,
其次寻找算法,
然后最好写出伪代码,
最后实现功能。
这道题目,大概做法就是已知c^2,寻找整数a,b使得a^2 + b^2 = c^2
这样题目就很清晰了,那该怎么处理呢?
首先想到的是循环,a从0开始循环,一直到c,如果存在b是整数,满足勾股定理,那么这对点就是。
现在不考虑负数,因为负数最后个数*2就好。
这道题目我提交了好多遍才成功,问题出在,数据不正确,和超时问题。
这就是具体分类没有搞清楚。
当a=某个数时,这时有a^2 + b^2 = c^2,并且b是整数,这时候a,b就构成了一对点:
                        此时存在四种情况:
                                                                 a,b
                                                                 a,-b
                                                                -a,b
                                                                -a,-b
当a = b时,b此时应该 等于之前的a,也就是(b,a)之前的,这又是一对点:
                       此时也是四种情况:
                                                                b,a
                                                                b,-a
                                                               -b,a
                                                               -b,-a
要注意两种特殊的情况:
a = 0,且b为整数时或者b = 0,a为整数时:
每一个有两种情况:
 a,0
-a,0
0,b
0,-b
a = b 且都为整数时:
有:
a,a
a,-a
-a,a
-a,-a
因为a=b所以就只有这四种
这里有一个最基本的算法,需要知道,就是判断这个数是不是整数的算法:
double a;
if(a==int(a)) return true;
一、第一种算法:
我已开始的做法,用到了两个循环,但也是最容易懂得:
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
    double x,y,z,r;//r为半径;
    cout <<"请输入半径的平方:"<<endl;
    cin >> z;
    r = sqrt(z);
    int count = 0;
    if(r == (int)(r))//位于坐标轴上的半径为整数,那么必有x或者y为整数,另一个为0
    {
        count = count + 4;
        //一共四种情况a,0 -a,0 0,b 0,-b
    }

for(x = 1; x< r; x++)
    {
        for(y = 1; y < r; y++){
            if((x*x+y*y) == z){count = count + 4}
        }
    }
    cout << count << endl;
}

//两个for循环,只是为了寻找到另一个与x配对的y,这里犯傻了,y明明可以直接求出来,只要判断y是整数即可,所以改进后:

for(x=0; x < r; x++)

y = sqrt(z - x*x);

if(y == int (y) )//判断y是整数

count = count + 4;

这样就变成了一个循环

所以,最后完整通过的代码是:

#include<iostream>
#include<cmath>
using namespace std;
int main()
{
    double x,y,z,r;
    cin >> z;
    r = sqrt(z);
    int count = 0;
    if(r == (int)(r))
    {
        count = count + 4;
    }
for(x = 1; x< r; x++)
    {
        y = sqrt(z - x*x);
        if(y == int(y)){
         count =count + 4;
  }
       
    }
    cout << count << endl;
}
如果你想查看具体是哪些点,代码如下:
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
    double x,y,z,r;
    cin >> z;
    r = sqrt(z);
    int count = 0;
    if(r == (int)(r))
    {
        count = count + 4;
       
        x = 0;
        y = sqrt(z - x*x);
       
     cout << "(" << x  << "," << y << ")"<<endl;
  cout << "(" << x  << "," << -y << ")"<<endl;
  
  cout << "(" << y  << "," << x << ")"<<endl;
  cout << "(" << y  << "," << -x << ")"<<endl;
    }
for(x = 1; x< r; x++)
    {
        y = sqrt(z - x*x);
        if(y == int(y)){
         count =count + 4;
    cout << "(" << x  << "," << y << ")"<<endl;
   cout << "(" << x  << "," << -y << ")"<<endl;
   cout << "(" << -x  << "," << y << ")"<<endl;
   cout << "(" << -x  << "," << -y << ")"<<endl;
  }
       
    }
    cout << count << endl;
}

优雅的点(2017网易校园招聘)---最详细的解答相关推荐

  1. 优雅的点-2017网易校园招聘

    [编程题] 优雅的点 小易有一个圆心在坐标原点的圆,小易知道圆的半径的平方.小易认为在圆上的点而且横纵坐标都是整数的点是优雅的,小易现在想寻找一个算法计算出优雅的点的个数,请你来帮帮他. 例如:半径的 ...

  2. 回文序列-2017网易校园招聘

    [编程题] 回文序列 如果一个数字序列逆置之后跟原序列是一样的就称这样的数字序列为回文序列.例如: {1, 2, 1}, {15, 78, 78, 15} , {112} 是回文序列,  {1, 2, ...

  3. 网易校园招聘历年经典面试题汇总:前端 岗

    这个系列计划收集几百份朋友和读者的面经,作者合集方便查看,各位有面经屯着可以联系我哦 这个系列离结束差的还特别多,会更新涵盖所有一线大厂的所有岗位,也可以关注一下. 腾讯校园招聘历年经典面试题汇总:前 ...

  4. 网易校园招聘历年经典面试题汇总:C++研发岗

    这个系列计划收集几百份朋友和读者的面经,作者合集方便查看,各位有面经屯着可以联系我哦 这个系列离结束差的还特别多,会更新涵盖所有一线大厂的所有岗位,也可以关注一下. 腾讯校园招聘历年经典面试题汇总:前 ...

  5. 杭州java校园招聘_网易校园招聘杭州Java笔试题

    地点:杭州 职位:java研发 第一部分:计算机科学基础 (注:所有职位必做) 1.(2分)最坏情况下时间复杂度为O(nlogn)的排序算法有() A.基数排序 B.归并排序.C.堆排序 D.快速排序 ...

  6. 【2017秋季校园招聘笔经面经专题汇总】

    [2017秋季校园招聘笔经面经专题汇总] 2017秋招进行时,牛妹特意为大家开放2017秋招面经专栏,同时面经活动也正在进行中,欢迎大家参与~~活动详情戳:http://www.nowcoder.co ...

  7. 腾讯2017年校园招聘笔试题第一题

    刚做完腾讯2017年校园招聘笔试题,在这里跟大家分享一下: 1. 题目 2. 我的思路 循环判断i(i从2到(输入值/2+1)),是否有满足i和(输入值-i)均为质数的情况.如果有,count加1.循 ...

  8. 腾讯2017年校园招聘笔试题第二题

    下面是腾讯2017年校园招聘笔试题第二题,在这里跟大家一起分享: 1. 题目 2. 我的思路 这题我觉得题目说的很清楚了.用类似于二分查找的方法,记录最大值.最小值和中间值,判断并记录在左区间(值为0 ...

  9. 2012网易校园招聘杭州站笔试

    恩,今天去参加了网易的笔试.题目随后更新. 1.长度为M字符串匹配与长度为N的字符串匹配的时间复杂度? 我查了查,O(M + N).KMP能做到. 这里:http://blog.csdn.net/me ...

最新文章

  1. 25个创意的交互式图表设计欣赏
  2. 类初始化的一道面试题
  3. vue中如何在方法中动态的删除集合中的元素!?
  4. 03.swoole学习笔记--web服务器
  5. python开发聊天机器人_Python实现机器人聊天
  6. shell逻辑判断和-a区别
  7. python中-----数组中的排序
  8. c++ 调用com组件步骤
  9. 广日电梯主板灯说明_广日MAX电梯维修手册.pdf
  10. 阿里巴巴达摩院发布2019十大科技趋势:数字身份将成为第二张身份证
  11. Android+如何导出微信照片,【每天3分钟】微信占了好多G,教你一步批量提取微信照片并清理空间...
  12. jy-12-SPRINGMYBATIS02——云笔记10-刘苍松
  13. 是非人生 — 一个菜鸟程序员的5年职场路 第28节
  14. 坑爹的hiredis API使用
  15. Java中线程池拒绝策略——代码讲解
  16. CentOS7自制openssh rpm包(含ssh-copy-id命令)—— 筑梦之路
  17. 易语言 正则_匹配空白中间数字
  18. python pyqt5 打开文件夹 读取文件列表
  19. 游戏背景音乐风格大致分类
  20. 【DB宝46】NoSQL数据库之CouchBase简介、集群搭建、XDCR同步及备份恢复

热门文章

  1. HDU1273-漫步森林
  2. px4机架和混控文件读取
  3. NIOS II 8:SDRAM(W9825G6KH-6),从这里开始使用软件版本改为18.
  4. Openstack中使用iso安装系统并启动vm
  5. ICLR2020论文阅读笔记reformer: THE EFFICIENT TRANSFORMER
  6. C# 文件直接打印功能
  7. 基于Matlab深度学习Yolov4-tiny的交通标志识别道路标志识别检测
  8. 雷军一往无前的十年(小米十周年公开演讲)附赠《一往无前》电子书籍
  9. 【Pygame小游戏】一发超人:弓箭手佛系射鸟休闲小游戏,你能射中几只?(源码白嫖)
  10. matlab运行LCT跟踪算法代码