数组去重的方法
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;
}
循环实现斐波那契