来源:牛客网
3道编程题目,记录3月7日牛客网模拟笔试(JS版)。如有错误,欢迎指正
1.好多鱼
.
<!--***好多鱼****** //鱼缸中有n条鱼,每条鱼的大小为fishSize[i](1<=i<=n,均为正整数),现将新捕捉的鱼放 //入鱼缸,若鱼A的大小为鱼B的2倍到10倍,鱼A会吃掉鱼B,不考虑鱼缸内鱼相互捕食,现知道 //新放入鱼的大小范围,保证放入的鱼是安全的,鱼放入也不会吃掉其他鱼,问有多少种鱼可 //以放入。 //输入描述 //1 12 新放入鱼的尺寸(1<=minSize,maxSize<=1000) //1 鱼缸里已有鱼的数量(1<=n<=50) //1 已有鱼的大小fishSize[i](1<=fishSize[i]<1000)-->
function manyFish(minFishSize,maxFishSize,fishNum,fishSize){ var fishKind=0; //输入值不在范围内 if(minFishSize<1||maxFishSize>1000||fishNum<1||fishNum>50||fishSize<1||fishSize>1000) return fishKind-1; //鱼的数量和已有鱼的大小数组的长度不一样 if(fishNum!=fishSize.length) return fishKind-1; //关键判断 for(var j=minFishSize;j<=maxFishSize;j++){ for(var i=0;i<fishNum;i++){ if(j<fishSize[i]){ if(2*j<=fishSize[i]&&10*j>=fishSize[i]){ break; } } else if(j>fishSize[i]){ if(2*fishSize[i]<=j&&10*fishSize[i]>=j){ break; } } if(i==(fishNum-1)) fishKind++; } } return fishKind; } var num=manyFish(1,12,1,[4]); if(num==-1) document.write("输入有误") else document.write(num);
2.循环单词
<!--如果一个单词通过循环右移获得的单词,我们称这些单词都为一种循环单词。例如:picture和turepic就是属于同一种循环单词。现在给出n个单词,需要统计这n个单词中有多少种循环单词。 输入例子:5 picture turepic icturep word ordw -->
<script type="text/javascript"> //判断种数是否重复,若有一对单词为一种循环单词,则再有单词属于这一种时不再把种数加1 function judge(arr,a){ for(var i=0;i<arr.length;i++){ if(a==arr[i]) return false; } return true; } //三层循环,第一层为从数组的第一个单词开始,依次取之后的单词,第二层为将数组中的该单词的每个字母依次放到末位,第三层为和剩下的每个单词比较 function circleWord(n,word){ var cir; var kind=0; var arr=[]; for(var i=0;i<n;i++){ cir=""; cir=word[i]; for(var j=0;j<word[i].length;j++){ var temp=cir.split("");//将单词分裂成字母赋给temp var a=temp.shift(j); temp.push(a); cir=temp.join(""); //document.write("i"+i+"j"+j+" "+"cir:"+cir+" "+"kind"+kind+"<br>"); for(k=i+1;k<n;k++){ if(cir===word[k]&&judge(arr,k)){ if(!judge(arr,i)) arr.push(k); else{ arr.push(i); arr.push(k); kind++; } } } } } return kind; } document.write(circleWord(5,["picture","turepic","icturep","word","ordw"])); </script>
3.超级素数幂
<!--如果一个数字能够表示为p^q(^表示幂运算),且p为一个素数,q为大于1的正整数就称这个数叫做超级素数幂。现给出一个正整数n,如果n是一个超级素数幂需要找出对应的p,q。 输入描述:输入一个正整数n(2<=n<=10^18) 输出描述,如果n是一个超级素数幂则输出p,q,以空格分隔,行末无空格。如果不是则输出No -->
<script type="text/javascript"> function prime(a){ if(a==1) return false; for(var i=2;i<=Math.sqrt(a);i++){ if(a%i==0) return false; } return true; } function superSqrt(n){ if(n<2||n>Math.pow(10,18)){ return 'No'; } else{ for(var p=2;p<n;p++){ if(prime(p)===false) continue; for(var q=2;q<n;q++){ if(Math.pow(p,q)===n){ return p+' '+q; } } } return 'No'; } } document.write(superSqrt(8)); </script>
