【牛客网】算法编程题汇总

来源:互联网 发布:淘宝网首页制作 编辑:程序博客网 时间:2024/06/11 12:52

1.优雅数:

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

输出描述:
输出为一个整数,即为优雅的点的个数

JavaScript版

var getNum = function(radix){    var sum = Math.floor(Math.sqrt(radix)) == Math.sqrt(radix)?4:0;    console.log(sum);    var range = Math.sqrt(radix);    for(i=1;i<range;i++){        var y = Math.sqrt(radix - i*i);        sum+= Math.floor(y) == y?4:0;        console.log("i: "+i+" sum: "+sum);    }    return sum;}

C语言版

#include<stdio.h>#include<math.h>int main(){    int R=0;    int sum = 0;    long double temp = 0;    scanf("%d",&R);    temp = sqrt(R);    sum = floor(temp)==temp?4:0;    for(int i = 1;i<sqrt(R);i++){        temp = sqrt(R - i*i);        sum += floor(temp)==temp?4:0;    }    printf("%d",sum);}

C语言需要注意用双精度

2.数字反转

对于一个整数X,定义操作rev(X)为将X按数位翻转过来,并且去除掉前导0。例如:
如果 X = 123,则rev(X) = 321;
如果 X = 100,则rev(X) = 1.
现在给出整数x和y,要求rev(rev(x) + rev(y))为多少?
输入描述:
输入为一行,x、y(1 ≤ x、y ≤ 1000),以空格隔开。

输出描述:
输出rev(rev(x) + rev(y))的值

#include<stdio.h>int rev(int m){    if(m<10){        return m;    }else if(m<100){        int n1 = m/10;        int n2 = m%10;        return n2*10+n1;    }else if(m<1000) {        int n1= m/100;        int n2 = (m/10 )%10;        int n3 = (m%10);        return n3*100+n2*10+n1;    }else{        int n1= m/1000;        int n2 = (m/100 )%10;        int n3 = (m/10)%10;        int n4 = m%10;        return n4*1000+n3*100+n2*10+n1;    }};int main(){    int x,y;    scanf("%d%d",&x,&y);    x = rev(x) +rev(y);    printf("%d",rev(x));}
原创粉丝点击