网易一道笔试题!
来源:互联网 发布:神舟战神 知乎 编辑:程序博客网 时间:2024/06/02 09:26
网易一道笔试题!
/*
输入一个正整数,若该数能用几个连续正整数之和表示,则输出所有可能的正整数序列
例如:27
2~7
8~10
13~14
或:
100000000
1413~14212
30438~33562
37783~40342
159688~160312
195057~195568
799938~800062
3999988~4000012
19999998~20000002
*/
没有仔细看下面这些代码,先把它们收集起来在慢慢看,一共(5)种方法!
(1).
//折半查找非递归版本
#include <iostream>
using namespace std;
void print(int a, int b)
{
cout<<a<<'~'<<b<<endl;
}
void Search_bin(int s)
{
int sum=1;
int low=1, high=1;
int mid=(s+1)/2 ;
while(high<=mid)
{
while (sum>s)
{
sum-=low;
low++;
if (sum==s)
{
print(low, high);
}
}
high++;
sum+=high;
if (sum==s)
{
print(low, high);
}
}
}
int main()
{
int s;
cin>>s;
Search_bin(s);
system("pause");
}
(2).
#include <stdio.h>
#include <math.h>
void out(int);
void prt(int, int);
int main( )
{
int n;
scanf("%d", &n);
out(n);
}
void out(int n)
{
int max=sqrt(n<<=1);
int x, y, i, j;
for(x=2; x<=max; x++){
if(n%x==0){
y = n/x;
prt(x, y);
if(x!=y)
prt(y, x);
}
}
}
void prt(int x, int y)
{
int i = (x-y+1);
int j = (x+y-1);
if(i<=0 || j<=0 || i&1 || j&1) return;
printf("%d - %d/n", i>>1, j>>1);
}
(3).
1 #include <stdio.h>
2 #include <math.h>
3
4 void out(int);
5 void prt(int, int);
6
7 int main( )
8 {
9 int n;
10 scanf("%d", &n);
11 out(n);
12 }
13
14 void out(int n)
15 {
16 int max=sqrt(n<<=1);
17 int x, y;
18 for(x=2; x<=max; x++){
19 if(n%x==0){
20 y = n/x;
21 prt(x, y);
22 if(x!=y)
23 prt(y, x);
24 }
25 }
26 }
27 void prt(int x, int y)
28 {
29 int i = (x-y+1);
30 int j = (x+y-1);
31 if(i<=0 || j<=0 || i&1 || j&1) return;
32 printf("%d - %d/n", i>>1, j>>1);
33 }
(4).
#include <stdio.h>
int main()
{
int s, n, a, fz;
scanf("%d", &s);
for (n = 2; (fz = (s << 1) - n * (n - 1)) > 0; ++n)
if (fz % (n << 1) == 0 && fz >= (n << 1))
{
a = fz / (n << 1);
printf ("%d~%d/n", a, a + n - 1);
}
return 0;
}
/*
思路是这样的:对于数s,若能表示成以a开头的连续n个整数之和,由等差数列求和公式,不难得出
s = (2a + n - 1) * n
对该式变形,得
a = (2s - n * n + n) / 2n
因此,s能表示成n个连续正整数之和的充要条件是:
上式右端的分母大于0,且能被分子整除,且除得的整数a要大于0。
根据该条件对n进行遍历,从n = 2开始,直到2s - n * n + n小于零结束,对期间的整数检验是否满足
上述条件。
由于2s是定值,所以2s - n * n + n减小速度为n^2级,是比较快速的,故算法的时间复杂度为O(sqrt(s))
----------------------
更正
误:s = (2a + n - 1) * n
正:2s = (2a + n - 1) * n
*/
(5).
#include<stdio.h>
int main(){
int IntNum = 1;
printf("please input a integer:");
scanf("%d",&IntNum);
if(IntNum <= 0){
return 1;
}
for(int i = IntNum - 1 ; i > 0 ; i--){
int temp = i;
int tempTotal = 0;
for(int j = temp ; j > 0 ; j--){
tempTotal += j;
if(tempTotal == IntNum){
//for(int k = temp ; k >= j ; k--){
//printf("%d ",k);
//}
//printf("/n");
printf("%d ~ %d/n",j,temp);
}
else if(tempTotal > IntNum){
break;
}
}
}
return 0;
}
我发现如果长期和他们在一起交流的话,肯定会很快变聪明的!
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zhj2006/archive/2006/10/21/1343509.aspx
- 网易一道笔试题!
- 网易笔试题一道
- 网易一道笔试题!
- 一道网易笔试题
- 网易笔试的一道题
- 网易的一道笔试题
- 网易的一道笔试题
- 一道网易笔试题(加入最优解法)
- 一道网易笔试题(加入最优解法)
- 一道网易游戏笔试题的不同解法
- 一道网易游戏笔试题的不同解法
- 2014年网易互联网在线笔试题一道
- 一道关于深度搜索入门的网易笔试题
- 网易2018校招内推Android笔试编程题一道
- 试题:网易笔试的一道题目
- 一道网易笔试题目-几何相关
- 网易一道算法题
- 一道概率题---网易面试
- uml总结
- 面试前需考虑的问题
- java.lang.Integer cannot be cast to java.lang.String Java int,double向String的转化和String向int,double的转换
- 2010-10-9 Test!
- WinCE上BINFS实现详解
- 网易一道笔试题!
- windows 7 USB 诡异消失的原因
- WinForm中日期控件开窗
- asp.net运行时动态修改主题
- C# 窗口间传递数据
- VirtualBox Share Folder配置
- 亚运火炬传递中山站80名火炬手出炉
- 網頁列印的分頁方法。
- php对一般搜索字符的处理