算法题,,

数组去重的方法

1、ES6中最常用,set去重

function unique(arr){
    return Array.from(new Set(arr)) 
}
var arr=[有重复元素的数组];
console.log(unique(arr));

 //Array.from()方法:将一个类数组(或可遍历)对象转换成一个真正数组
不考虑兼容性,这种方法代码最少
但无法去掉重复的“{}”空对象

2、indexOf去重

新建一个空结果数组,for循环原数组,判断结果数组是否存在当前元素,有相同的值跳过,不同则push进数组

function unique(arr){ 
        if(!Array.isArray(arr)){
            console.log('type error!')
        }
        var array=[];    //空结果数组
        for(var i=0;i<arr.length;i++){
            if(array.indexOf(arr[i])===-1){  //找不到返回-1
                array.push(arr[i])
            }
        } 
        return array;  //返回结果数组
}   

3、ES5中最常用,for循环嵌套,splice去重(修改原数组)

外层循环元素,内层循环比较值
            如果和后一个相同->切割掉
function unique(arr){     
        for(var i=0;i<arr.length;i++){
            for(var j=i+1;j<arr.length;j++){  //只和后一个数比较就行 
                if(arr[i]==arr[j]){
                    arr.splice(j,1);  //改变原数组
                    j--;
                }
            }
        }
        return arr;  //因为splice的原数组是剩下的
}

4、sort()

先用sort进行排序,然后根据排序结果进行遍历、和相邻元素比对
function unique(arr){ 
        if(!Array.isArray(arr)){
            console.log('type error!')
        }
       arr=arr.sort();   //升序排序
       var array=[arr[0]];
       for(var i=1;i<arr.length;i++){
           if(arr[i]!==arr[i-1]){
               array.push(arr[i]);
           }
       }
       return array;
}   

5、filter
JS数组去重

创建一个新数组,包含通过所提供函数实现的测试的所有元素(返回测试函数成立的元素)
filter(callback, this值):
callback接受三个参数:
    element-当前正在处理的元素,
    index
    array
利用filter我们可以在代码层面简化一下外层循环

回文数

函数:字符串长度
     循环判断字符是否相等
     输出布尔值结果

function isHuiWen(str){
	var len = str.length;
	for (var i=0;i<(len/2);i++){
		if(str[i]!=str[len-1-i]){
			return false;
		}
	}
	return true;
}
console.log(isHuiWen("qqwQwqq"));

number——>string:加" "
string——>number:parseInt,parseFloat
var number = parseInt(window.prompt("输入回文数")); 
      if(daozhi(number) == number) { 
        document.writeln(number + "是回文数"); 
      } 
      else { 
        document.writeln(number + "不是回文数");  
} 
        
 /*整数的倒置*/
 function daozhi(num) { 
    var newNumber = 0;           
    while(num != 0){ 
       newNumber *= 10; 
          newNumber =newNumber + (num % 10); 
          num = Math.floor(num/10); 
        } 
          
        return newNumber; 
      } 
int main()
{
    int num, m =0, s = 0, n;
    printf("请输入一个正整数:\n");
    scanf("%d",&num);
    s = num;
    while(s!=0)
    {
        n = s%10;   //n是s的末位数
        m = m*10 +n; //把s的末位数放到m的末位
        s = s/10;  //去掉末位数的新s
    }
    if (num == m)
        printf("%d 是回文数\n", num);
    else
        printf("%d 不是回文数\n",num);
    return 0;
}

水仙花数

一个3位数,它的每个位上的数字的 3次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153

循环三位数,分别取整个位、十位、百位
判断——如果满足就输出

for(var i=100;i<1000;i++){
	var a=parseInt(i/100);
	var b=parseInt((i-a*100)/10);
	var c=parseInt(i%10);
	if(i==a*a*a+b*b*b+c*c*c){
		document.write(i+"<br/>");
		//console.log(i);
	}
}

C语言

#include <stdio.h>  
#include<math.h>

1、

输入两个正整数a,b(1 <= a, b <= 10^9),输入数据包括多组

输出a+b的结果

#include <stdio.h>
int main(){
   int a,b;
   while(scanf("%d%d",&a,&b)!=EOF){  //EOF文件结束符
   } 
   printf("%d\n",a+b);
}

2、

第一行:一个数据组数t(1 <= t <= 100)
接下来每行:两个正整数a,b(1 <= a, b <= 10^9)

输出a+b的结果

#include<stdio.h> 
int main(){
    int t, i, a, b;
    scanf("%d", &t);
    for(i=0; i<t; i++){
        scanf("%d %d", &a, &b);
        printf("%d\n", a+b);
    }
    return 0;
}

3、

输入两个正整数a,b(1 <= a, b <= 10^9),输入数据有多组,如果输入为0 结束输入

输出a+b的结果

#include <stdio.h>
int main(){
    int a,b;
    while(scanf("%d%d",&a,&b)!=EOF)
    {
        if (a==0&&b==0)
        {
            break;
        }     
        printf("%d\n",a+b);
    }
    return 0;
}

4、

每组数据一行,每行的第一个整数为整数的个数n(1 <= n <= 100), 
n为0的时候结束输入,接下来n个正整数,即需要求和的每个正整数

输出:每组数据的和

#include<stdio.h>
int main(){
    int n,i,num,sum;
    while(scanf("%d",&n)&&(n!=0)){
        sum=0;
        for(i=0;i<n;i++){
            scanf("%d",&num);
            sum+=num;
        }
        printf("%d\n",sum);
    }
    return 0;
}

5、

第一行:一个正整数t(1 <= t <= 100), 表示数据组数
接下来t行, 每行一组数据
每行的第一个整数为整数的个数n(1 <= n <= 100)
接下来n个正整数, 即需要求和的每个正整数
2
4 1 2 3 4
5 1 2 3 4 5

每组数据输出求和的结果
10
15

#include<stdio.h>
int main(){
    int n,t,i,j,a;
    scanf("%d",&t);
    for(i=0;i<t;i++){
        int sum=0;
        scanf("%d",&n);
        for(j=0;j<n;j++){
            scanf("%d",&a);
            sum=sum+a;
        }
        printf("%d\n",sum);
    }
    return 0;
}

循环实现斐波那契


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值