京东数据与算法岗之欲哭无泪了

第一道可能我自己的问题,第二道为什么赛码通不过。。。。。
上题:
题目描述:
小B热衷于体育运动赛事活动,这样她就可以发挥自己的一项特长——赛事解说。小B因为自身的高颜值,加之评论犀利到位、语言诙谐,因此拥有一大批粉丝。

一年一度的运动会又即将开始,这将是一个激动人心的季节,每个人都有自己的目标:运动员希望奋力争夺奖牌,观众希望欣赏到心仪运动员的精彩表现,解说员则要争抢更方便的位置以便观看和评论。

今天的赛事在三个圆形的运动场同时举行,小B希望能够在此次的赛事解说中再展风姿,占据最佳的观察点,从而能够观看所有运动场上的比赛。由于今天的所有赛事同等重要,她希望以相同视角(观察点到运动场边缘切线的夹角)观看运动场。如果满足条件的观察点不止一个,她希望首选具有最大视角的观察点。

小B对寻找观察点不是很在行,她希望请你帮忙寻找最合适的观察点。需要指出的是,运动场馆都是露天的,解说员的视线不受遮挡。
输入
输入中有多组测试数据。每组测试数据包含3行,每行代表一个运动场。每行的格式为x y r,其中(x, y)为运动场中心的坐标,r为运动场的半径,-1000<=x, y<=1000,1<= r <=1000。所有数据均为正数,运动场互不相交(无公共点)且其中心点不在同一直线上。
输出
对每组测试数据,若存在最佳观察点,则在单独的一行里输出改点的坐标(保留6位小数),否则输出“No”。

样例输入
0 0 10
60 0 10
30 30 10
样例输出
30.000000 0.000000


小明同学学习了不同的进制之后,拿起了一些数字做起了游戏。小明同学知道,在日常生活中我们最常用的是十进制数,而在计算机中,二进制数也很常用。现在对于一个数字x,小明同学定义出了两个函数f(x)和g(x)。
f(x)表示把x这个数用十进制写出后各个数位上的数字之和。如f(123)=1+2+3=6。
g(x)表示把x这个数用二进制写出后各个数位上的数字之和。如123的二进制表示为1111011,那么g(123)=1+1+1+1+0+1+1=6。
小明同学发现对于一些正整数x满足f(x)=g(x),他把这种数字称为幸运数,现在他想知道,小于等于n的幸运数有多少个。
输入
第一行一个整数T(T<=10000)表示数据组数,每组数据输入一个数n(n<=100000)。
输出
每组数据输出一行,小于等于n的幸运数个数。

样例输入
3
1
5
21
样例输出
1
1
3

Hint
小于等于21的三个幸运数分别为:1,20,21。
第一道代码我就不上传,太难看的代码,第二道,各位看官,我为什么就通不过==
#include<iostream>
using namespace std;
int f(int n){
	int t=n;
	int res=0;
	while(t>0){
		res+=t%10;
		t=t/10;
	}
	return res;
}
int g(int n){
	int t=n;
	int res=0;
	while(t>0){
		res+=t%2;
		t=t/2;
	}
	return res;
}

int main(){
	int T;
	cin>>T;
	for(int ss=0;ss<T;ss++){
		int n;
		cin>>n;
		int count=0;
		for(int i=1;i<=n;i++){
			if(f(i)==g(i)){
				count++;
			}
		}
		cout<<count<<endl;
	}
	return 0;
}


认真想一下,其实编程题目真心不难,关键在于平时的编码习惯以及严谨的思维
	


全部评论
超时了吧,另外用scanf。不然我o1的算法都超时
点赞 回复
分享
发布于 2016-09-05 21:14
我用python 本地没问题,在线也是死活不能通过。
点赞 回复
分享
发布于 2016-09-05 21:14
滴滴
校招火热招聘中
官网直投
我Java也是,本地妥妥的,当我带着自信和微笑复制粘贴的时候,---------------你TM在逗我?
点赞 回复
分享
发布于 2016-09-05 21:25
很明显要打表啊。。。。也就是简单DP算是,不能把原来计算的结果浪费掉
点赞 回复
分享
发布于 2016-09-05 21:26
第一道怎么做的,第二道先设一个100000大小的数组,dp把所有结果求出来,然后根据输入直接读就好了
点赞 回复
分享
发布于 2016-09-05 21:28
不知道它这个是怎么判题的,我也是这样输入一个求解一个,但是用下面的办法是可以ac的。 import java.util.Scanner; public class Main { public static void main(String args[]) { boolean[] B = new boolean[100000 + 1]; for (int i = 1; i < 100000 + 1; i++) { int binary =g(i); int ten = f(i); if (binary == ten) B[i] = true; } Scanner cin = new Scanner(System.in); int times = cin.nextInt(); for (int i = 0; i < times; i++) { int n = cin.nextInt(); int count = 0; for (int j = 1; j <= n; j++) {{ if (B[j]) count++; } } System.out.println(count); } } private static int f(int num){ String str = String.valueOf(num); int sum = 0; for(int i = str.length() - 1;i>=0;i--){ sum+=Integer.valueOf(str.charAt(i)+""); } return sum; } private static int g(int num){ String str = Integer.toBinaryString(num); int sum = 0; for(int i = 0;i<str.length();i++){ sum+=Integer.valueOf(str.charAt(i)+""); } return sum; } }
点赞 回复
分享
发布于 2016-09-05 21:29
一个一个求解,就是会超时
点赞 回复
分享
发布于 2016-09-05 21:33
选择题基本不会。。。。
点赞 回复
分享
发布于 2016-09-05 22:11
我只求了最大那个数。。然后都知道结果了。
点赞 回复
分享
发布于 2016-09-06 00:26
第一道题可以用模拟退火法做数值计算 http://blog.csdn.net/snowy_smile/article/details/50131317
点赞 回复
分享
发布于 2016-09-06 09:51
为啥同一个岗位,不同题目的啊~
点赞 回复
分享
发布于 2016-09-06 10:02
投递的是数据开发,选择题一半机器学习的题,跪了
点赞 回复
分享
发布于 2016-09-06 10:14
//运行过了,能通过,可以试试这个代码 #include<iostream> using namespace std; int f(int m) {     int sum1=0;     while(m>0)     {         sum1+=(m%10);         m=m/10;     }     return sum1; } int g(int n) {     int sum2=0;     while(n>0)     {         sum2+=(n%2);         n=n/2;     }     return sum2; } int main() {     int n;     int sum=0;     cin>>n;     if(n>=1 && n<=100000)     {         for(int i=1;i<=n;i++)         {            // int a=f(i);            // int b=g(i);            // if(a==b)             if(f(i)==g(i))             {                 sum++;             }         }     }     cout<<sum;     return 0; }
点赞 回复
分享
发布于 2018-08-21 09:32

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务