Created
June 24, 2014 01:32
-
-
Save jikeytang/ff4a81dde1083cfbab82 to your computer and use it in GitHub Desktop.
[ Javascript ] - 20140624-题目1
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
对一个数组进行排序:要求奇数在前偶数在后,奇数从大到小排列,偶数从小到大排列。 | |
如:var arr = [13,4,2,3,8,5,6,7]; -> arr = [13,7,5,3,2,4,6,8]; | |
输入一个自然数 n,输出所有可能和为 n 连续正数序列。 | |
例如输入15,由于1+2+3+4+5=4+5+6=7+8=15, | |
所以输出 3 个连续序列1,2,3,4,5、4,5,6 和7,8。 | |
PS: | |
1. 回复时注意加上下面这句话,才会有语法高亮或格式缩进。 | |
```javascript | |
// you code | |
``` | |
2. 粘贴代码时请使用shift+tab,缩进前面的空白。 |
skyhacker2
commented
Jun 24, 2014
对一个数组进行排序:要求奇数在前偶数在后,奇数从大到小排列,偶数从小到大排列。
如:var arr = [13,4,2,3,8,5,6,7]; -> arr = [13,7,5,3,2,4,6,8];
var arr = [13,4,2,3,8,5,6,7];
function arr_sort(arr){
function desc(x,y)
{
if ((x%2===0 && y%2!==0)||(x%2!==0&&y%2!==0&&x<y)||(x%2===0&&y%2===0&&x>y))
return 1;
else
return -1;
}
arr.sort(desc);
return arr;
}
console.log(arr_sort(arr));
function fuckSort(arr){
var newArr = [];
for(var key in arr){
if(arr[key] % 2 ==0){
if(newArr.length ==0){
newArr.push(arr[key]);
}else{
var i = 0;
for(i =newArr.length; i>0 && newArr[i]%2==0 && newArr[i]> arr[key]; i--);
newArr.splice(i,0,arr[key]);
}
}else{
if(newArr.length ==0){
newArr.push(arr[key]);
}else{
var i = 0;
for(i= 0; i < newArr.length && newArr[i]%2 ==1 && newArr[i] > arr[key]; i++);
newArr.splice(i,0,arr[key]);
}
}
}
return newArr;
}
等差数列
var n = 15;
var max = n % 2 == 0? n / 2 : n / 2 + 1;
for (var i = 1; i < max; i++) {
for (var j = i+1; j <= max; j++) {
if ((i+j) * (j-i+1) / 2 == n) {
(function(i, j) {
var ret = [];
for (var k = i; k <= j; k++) {
ret.push(k);
}
console.log(ret.join(','));
})(i, j);
}
}
}
输入一个自然数 n,输出所有可能和为 n 连续正数序列。
例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,
所以输出 3 个连续序列1,2,3,4,5、4,5,6 和7,8。
function nums(num){
var ress=[];
var max=parseInt(num/2)+(num%2);
for(var i=2;i<=max;i++){
if((num/i-parseInt(num/i)===0.5)&&i%2===0||(num/i-parseInt(num/i)===0)&&i%2!==0){
var a=(i%2===0)?1:0;
var first_num=parseInt(num/i)-parseInt(i/2)+a;
if(first_num>0){
ress.push([first_num,i]);
}
}
}
getres(ress);
function getres(arr){
for(var i=0;i<arr.length;i++){
var res=[];
for(var j=arr[i][0];j<arr[i][0]+arr[i][1];j++){
res.push(j);
}
console.log(res.join("+"));
}
}
}
nums(280);
来个 BDD 测试驱动版
CustomeSortSpec.js
describe("Custome Sort", function() {
var input = [13,4,2,3,8,5,6,7];
var output = [13,7,5,3,2,4,6,8];
var cs;
beforeEach(function() {
cs = new CustomeSort();
});
it("should be equal", function() {
cs.sort(input);
expect(cs.output).toEqual(output);
});
});
CustomeSort.js
function CustomeSort() {
// body...
}
CustomeSort.prototype.sort = function(arrParam) {
// body...
this.output = arrParam.sort(function(a, b){
return b - a;
});
for (var i = this.output.length - 1; i >= 0; i--) {
var oddPosition = this.output.length - 1;
if (this.output[i] % 2 == 0) {
this.output.splice(oddPosition, 1, this.output.splice(i, 1)[0]);
oddPosition--;
};
};
};
/*
对一个数组进行排序:要求奇数在前偶数在后,奇数从大到小排列,偶数从小到大排列。
如:var arr = [13,4,2,3,8,5,6,7]; -> arr = [13,7,5,3,2,4,6,8];
*/
function sortNum(arr){
arr.sort(function(x,y){
if(x%2==1&&y%2==0){// 1,前奇后偶 不交换
return -1;
}else{
return 1;
}
});
arr.sort(function(x,y){
if(x%2==1&&y%2==0){
return -1;
}else if(x%2==1&&y%2==1&&x<=y){// 2 两个奇 降序序
return 1;
}else if(x%2==1&&y%2==1&&x>y){
return -1;
}else if(x%2==0&&y%2==0&&x<=y){ // 两个偶 升序
return -1;
}else if(x%2==0&&y%2==0&&x>y){
return 1;
}
});
return arr;
}
var arr = [18,13,15,10,4,8,7,9];
alert(sortNum(arr))
/*
输入一个自然数 n,输出所有可能和为 n 连续正数序列。
例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,
所以输出 3 个连续序列1,2,3,4,5、4,5,6 和7,8。
*/
function printNum(num){
var start=1,arr=[];
while(start<num/2){
var temp=start,i=temp,saveStr='';
while(temp<=num){
saveStr+=i+'+';
if(temp==num){
arr.push(saveStr.substr(0,saveStr.length-1));
break;
}
i++;
temp+=i;
}
start++;
}
return arr;
}
alert(printNum(150));
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment