本文是鍛煉編程邏輯思維的一些題的歸納,紅色字體是個人認為初學比較難懂的題。
1.日期計算器:用戶輸入年月日,計算並打印出來是今年的第幾天,星期幾
1 function data(){ 2 //首先輸入年月日 3 //1900年 1月1日為周一 4 var year =Number(prompt("請輸入今年是哪一年 :")) ; 5 var month =Number(prompt("請輸入是哪個月:")) ; 6 var day = Number(prompt("請輸入今天是幾號:")) ; 7 var i = 1; 8 var sum =0; 9 while(i<month){ 10 switch (i){ 11 case 1: 12 case 3: 13 case 5: 14 case 7: 15 case 8: 16 case 10: 17 sum= sum +31; 18 break; 19 20 case 2: 21 if(year%400==0 || (year%4==0 && year!=0)){ 22 sum = sum+29; 23 }else{ 24 sum = sum +28; 25 } 26 break; 27 28 case 4: 29 case 6: 30 case 9: 31 case 11: 32 sum = sum+30; 33 break; 34 } 35 i++; 36 } 37 sum = sum + day; 38 document.write("今天是這一年的第"+sum +"天"); 39 40 //計算今天周幾已知1900的一月一日是周一,計算出1900到現在一共有幾天 41 for(var y=1900;y<=year;y++){ //year是自己輸入要查詢的年份,在年份到1900之間所有的 42 //y表示從1900年開始的每一年 43 if(year%400==0 || (year%4==0 && year!=0)){ 44 sum += 366; //如果是閏年就加366天 45 }else{ 46 sum += 365; 47 } 48 } 49 //計算今天是周幾 50 var week= sum%7;//取7余數就是周幾(如果一月一號正好是周一的話) 51 switch (week) { 52 case 0: 53 console.log("今天星期日"); 54 break; 55 case 1: 56 console.log("今天星期一"); 57 break; 58 case 2: 59 console.log("今天星期二"); 60 break; 61 case 3: 62 console.log("今天星期三"); 63 break; 64 case 4: 65 console.log("今天星期四"); 66 break; 67 case 5: 68 console.log("今天星期五"); 69 break; 70 case 6: 71 console.log("今天星期六"); 72 break; 73 } 74 } 75 </script>
2.判斷101-200之間有多少個素數,並輸出所有素數。
其中定義布爾類型做判斷是開關邏輯思想,會常用。
<script type="text/javascript">
function prime(){
// for(var i=2;i<=100;i++){//打印出2-100的所有的數字
// var flag = true;//定義一個布爾類型的值,
// //console.log(i);
// for(var j =2;j<i;j++){//可以輸出j到i之間的數字,在這之間的數字判斷是否還有和i之間可以取余的
// //判斷i是否能被j整除,取余為0代表可以被j整除,就不是素數,在不是宿舍的時候不進入
// if(i%j==0){
// flag = false;
// }
// }
// if(flag){
// console.log(i);
// }//當flag為真的時候,輸出i
// }
// }
//方法二(類似)
var flag = false;//先定義一個開關並且賦值布爾類型用來判斷
for (var i=2;i<100;i++){//控制需要判定的數字,從二開始遞增到100
for(var j = 2; j<i;j++){//控制i以內的除數,必須比i小
if(i%j == 0){//判定i和j之間是否可以被整除,如果存在個j可以整除i,則不為素數
flag = false ;//不是素數的話就 把flag的值改為false
break;//跳出循環
}
else{//else則是素數的
flag = true;
}//是素數的話就輸出i
}
if(flag){//輸出放在大循環中,是素數就輸出一次
//count++;
console.log("素數:"+i);
}
}
}
</script>
3.打印出所有的"水仙花數",所謂"水仙花數"是指一個三位數,其各位數字立方和等於該數本身。例如:153是一個"水仙花數",因為153=1的三次方+5的三次方+3的三次方。
1 <!--打印出所有的"水仙花數",所謂"水仙花數"是指一個三位數,其各位數字立方和等於該數本身。例如:153是一個"水仙花數",因為153=1的三次方+5的三次方+3的三次方。--> 2 <button onclick="flower()">水仙花數</button> 3 <!--水仙花數是從100到1000的三位數--> 4 <script type="text/javascript"> 5 var a,b,c;//聲明三位數的三位變量 6 function flower(){ 7 for(var i=100;i<1000;i++){//遍歷一百到一千的所有數字 8 a= i%10;//三位數的個位數 例如153 a=3...27 b5...125 c1....1 9 b =parseInt((i/10)%10);//十位數 10 c =parseInt(i/100) ; //百位數 11 // console.log(a,b,c); 先看一眼對不對; 12 if(i== a*a*a+b*b*b+c*c*c){//是否滿足水仙花數的條件 13 document.write(i+"<br />") 14 } 15 } 16 } 17 </script>
4.將一個正整數分解質因數。例如:輸入90,打印出90=2*3*3*5。
程序分析:對n進行分解質因數,應先找到一個最小的質數k,然后按下述步驟完成:
(1)如果這個質數恰等於n,則說明分解質因數的過程已經結束,打印出即可。
(2)如果n>k,但n能被k整除,則應打印出k的值,並用n除以k的商,作為新的正整數你n,重復執行第一步。
(3)如果n不能被k整除,則用k+1作為k的值,重復執行第一步。
<button onclick="number()">分解質因數</button>
<!--將一個正整數分解質因數。例如:輸入90,打印出90=2*3*3*5。
程序分析:對n進行分解質因數,應先找到一個最小的質數k,然后按下述步驟完成:
(1)如果這個質數恰等於n,則說明分解質因數的過程已經結束,打印出即可。
(2)如果n>k,但n能被k整除,則應打印出k的值,並用n除以k的商,作為新的正整數你n,重復執行第一步。 -->
<script type="text/javascript">
//思路 90/2=45
// 45/3=15
// 15/3=5
// 90為輸入的數字,分解數字應該是從2開始的,如果不行就遞增的過程
// 分解后的值應該重新定義在新的輸入的變量中,一次打印出分解數字
function number(){
var num = prompt("請輸入一個數字");
for(var i = 2;i<num;i++ ){//i為分解的因數 所以 i必須小於num,在num之間找到分解的因數i
while(num%i==0 && num!=k){//如果成立的話,表示num被i分解
console.log(i);//打印出來因數i
//將分解的數字重新賦值繼續計算,此刻就如同分析中的第二步驟,將計算出來的45賦值給num
num = num /i;
}
//如果這個質數恰等於n,則說明分解質因數的過程已經結束,打印出即可.
if(num==k){
console.log(k);
break;
}
}
}
</script>
5.求s=a+aa+aaa+aaaa+aa...a的值,其中a是一個數字。例如2+22+222+2222+22222(此時共有5個數相加),幾個數相加有鍵盤控制。
<button onclick="aa()">求疊加數字的和</button>
<!--求s=a+aa+aaa+aaaa+aa...a的值,其中a是一個數字。例如2+22+222+2222+22222(此時共有5個數相加),幾個數相加有鍵盤控制。-->
<script type="text/javascript">
//函數思路:前面一項乘以10再加上a,就是aa
function aa(){
var a = parseInt(prompt("請輸入一個數字:"));//假設輸入2
var count =parseInt(prompt("請輸入一個數字需要疊加的個數:")) ;//輸入4
var sum = 0,n=0;//n表示每一個數的加數,sum用來存儲相加的和
for(var i=0; i<=count;i++){//表示從零開始到輸入的個數
n = n*10+a; //假設 n = 2 第二輪 n= 10+2
sum = sum+n;//sum = 2
}
console.log(sum);
}
</script>
6.猴子吃桃問題:猴子第一天摘下若干個桃子,當即吃了一半,還不癮,又多吃了一個 第二天早上又將剩下的桃子吃掉一半,又多吃了一個。以后每天早上都吃了前一天剩下 的一半零一個。到第10天早上想再吃時,見只剩下一個桃子了。求第一天共摘了多少。
1 <button onclick="fun6()">猴子</button> 2 <script type="text/javascript"> 3 //思路:sum/2+1=猴子第一天吃的 4 //第九天吃只剩 下一個了,就是i=9的時候 sum = 2*sum+1 5 //逆向思維,從最后一天開始算 6 function fun6(){ 7 var sum = 1,i=9;//i是天數,sum是剩下的 8 while(i>=1){ 9 sum = 2*sum+1 //當i為9的時候,sum為1 1/2-1,剩下了一個 10 i--; 11 } 12 console.log(sum); 13 } 14 </script>
7.計算用戶輸入的數字的階乘,例如用戶輸入的是5,則計算5的階乘,5的階乘為 5*4*3*2*1
<!--計算用戶輸入的數字的階乘,例如用戶輸入的是5,則計算5的階乘,5的階乘為 5*4*3*2*1-->
<!--思路:接收用戶輸入:n;
2.階乘的計算方法是n*(n-1)*(n-1-1)直到為1 利用循環實現
-->
<script type="text/javascript">
function fun8(){
//接收用戶輸入
var n = prompt("請輸入一個數字:計算它的階乘");
var fac = 1;
//再定義一個變量用來存儲其他乘數
for(var i=1;i<=n;i++){
fac = fac*i;
}
console.log(fac);
}
</script>
<button onclick="fun8()">計算階乘</button>
8.定義一個函數,返回1+1/3+1/5+1/7+....1/n的和
<!--定義一個函數,返回1+1/3+1/5+1/7+....1/n的和-->
<script type="text/javascript">
//思路邏輯:從一開始,每次增加二,加到n
function fun9(){
//接受用戶輸入的n,再定義一個變量來接收他們的和
var n =parseFloat( prompt("請輸入一個數:"));
var sum =0;
//從1開始的循環,每次增加兩個
for(var i=1;i<=n;i+=2){
sum = sum + (1/i);
//var test = parseFloat(1/i) ; 測試用的
}
console.log(sum);
}
</script>
<button onclick="fun9()">求....的和</button>
9.定義一個函數,打印九九乘法口訣表
<button onclick="fun10()">乘法口訣表</button>
<!--打印乘法口訣表-->
<script type="text/javascript">
//邏輯:每一列中輸出i個乘法式,列循環不成立輸出一個換行,行+1繼續循環列
function fun10(){
for(i=1;i<=9;i++){//控制行
for(j=1;j<=i;j++){//控制列
var pro = i*j;
document.write(i+"*"+j+"="+pro +"\t");
}
document.write("<br />")
}
}
</script>
10.有一張0.0001米的紙,對折多少次可以達到珠穆朗瑪峰的高度8848;
<!--.有一張0.0001米的紙,對折多少次可以達到珠穆朗瑪峰的高度8848m;-->
<script type="text/javascript">
function mountain(){
var h =0.0001;
for(var i=1;i>0;i++){//這個循環表示每次折疊h高度增加兩倍,i用來存儲折疊的次數。
h=h*2;
if(h>8848){//如果高度一定達到了,8848的時候就跳出循環
break;
}
}
}
console.log(i);
</script>
<button onclick="mountain()">計算珠峰</button>
11.羽毛球拍15元,球3元,水2元。200元每種至少一個,有多少可能羽毛球拍最多買13個 球最多買66個 水最多買100個
<!--羽毛球拍15元,球3元,水2元。200元每種至少一個,有多少可能 羽毛球拍最多買13個 球最多買66個 水最多買100個-->
<!--思路:每個都循環出所有的可能性,然后在符合相加=200的時候輸出-->
<script type="text/javascript">
//聲明一個變量存儲可能性的數值
var pos=0;
for(var i=1;i<=13;i++){//羽毛球拍
for(var j=1;j<=66;j++){
for(var k=1;k<=100;k++){
if(i*15+j*3+k*2){//每次符合條件的可能性就自動加一
pos++;
}
}
}
}
console.log(pos);
</script>
12.定義函數,去掉數組中重復元素
// 2.定義函數,去掉數組中重復元素 function unique(arr){ // 1.循環從arr中取值,i從0,同時創建空數組result for(var i=0,result=[];i<arr.length;i++){ // 2. 循環遍歷result,j從0 for(var j=0;j<result.length;j++){ // 3.如果result中當前元素等於arr中當前元素 arr中的這個數在新數組中已經存在 if(arr[i]==result[j]){ break;//退出循環 } }// 遍歷結束 // 如果j等於result的length 表示這個元素在新數組中不存在 if(j==result.length){ // 將arr中當前元素,追加result末尾 result[result.length]=arr[i]; } }// 遍歷結束 return result;// 給出返回值 } function testUnique(){ var arr=[1,1,2,2,3,4,3,5,6]; var result=unique(arr); console.log(result); }
13.從鍵盤接受10個整數,求出其中的最大值和最小值。
<script type="text/javascript">
function max_min(){
//定義一個數組,接收用戶輸入
var arr=[];
for(var i=0;i<10;i++){//接收用戶輸入十次(因為是從0開始的所以i<10),在十次結束后
arr[i] = prompt("請輸入一個整數");
alert("已經輸入了"+(i+1)+"次");//彈框提示輸入了幾次
}
console.log(arr);
var max=arr[0];//聲明一個變量,用來存儲最大的值
for(i=0;i<arr.length;i++){//遍歷arr【】中的所有的數字
if(max<arr[i]){//如果比后面元素數字小的話就,換位置,保證第一個元素是最大的
var temp ;//聲明一個空值來換位置
temp=max;
max = arr[i];
arr[i] = temp;
}
}
console.log("最大值為"+max);
var min=arr[0];
for(i=0;i<arr.length;i++){
if(min>arr[i]){
var temp ;
temp=max;
min = arr[i];
arr[i] = temp;
}
}
console.log("最小值為"+min);
}
</script>
<button onclick="max_min()">輸入數字,求最大值和最小值</button>
14.輸入10個數,保存在一個數組中,在數組中查找某個數字,給出是否找到信息,如果找到了輸出該數在數組中所處的位置,如果找不到輸出“找不到”
<script type="text/javascript">
function check(){
//首先接收用戶輸入十次
var arr =[];
for(i=0;i<10;i++){
arr[i] = prompt("請輸入十個整數");
alert("已經輸入了"+(i+1)+"次");
}
//聲明一個變量,存儲用戶輸入要查找的數字
var num= prompt("輸入要查找的數字")
//遍歷數組
for(i=0;i<arr.length;i++){
if(num == arr[i]){
alert("找到了,在第"+ (i+1)+"位");
}
else{
alert("找不到,輸入錯了吧");
}
}
}
</script>
<button onclick="check()">查找數字在哪</button>
15.顧客從超市采購了10件商品,編寫一個程序,用於接受每件商品的價格,計算應付的總金額。並分別打印出各個商品的價格以及應付的總金額的小票。
<script type="text/javascript">
//先寫一個空數組,用循環來接收輸入的值
var arr=[];
var sum = 0;//存儲總量
for(i=0;i<10;i++){
arr[i] =Number( prompt("請輸入商品的價格:"));
console.log("商品單價是"+arr[i]);
alert("已經輸入了"+(i+1)+"件商品");
}
//計算總和
for(i=0;i<10;i++){
sum+=arr[i];
}
console.log("商品總價是"+sum);
</script>
16.編寫一個程序,用於產生20個0-10之間的隨機數,將這20個隨機數存入數組,並通過函數統計這些隨機數中某個數出現的次數
思路: 先聲明一個數組用來存儲所有的隨機數的值,然后接受用戶輸入一個值,依次去比較有沒有重復的,有的話計數器(time)加一
1 <script type="text/javascript"> 2 //先聲明一個數組 3 var arr= new Array(20); 4 var time=0; 5 for(var i=0;i<arr.length;i++){ 6 arr[i] = parseInt(Math.random()*10) ; 7 } 8 console.log(arr); 9 //遍歷arr中的所有的數字, 10 var num = Number(prompt("輸入一個數判斷出現的次數:")) 11 for(var i=0;i<arr.length;i++){ 12 // for(var j=0;j<arr.length-i-1;j++){ 13 if(num==arr[i]){ 14 // console.log("重復的"+arr[j]); 15 time++; 16 } 17 // } 18 } 19 console.log(time); 20 </script>
17.將一個數組中的元素逆序輸出,即第一個元素和最后一個元素交換,第二個數與倒數第二元素交換…..,
例如:原數組為:9 2 5 7 8,逆序后的數組為:8 7 5 2 9
這個題主要是要用逆向排序的思路典型
先聲明一個數組,存儲用戶輸入,然后再逆向輸出
<script type="text/javascript">
function fun4(){
var arr = new Array(6);
for(var i=0 ;i<arr.length;i++){
arr[i]=Number(prompt("請輸入第"+(i+1)+"個數字"));
}
for(var j=arr.length-1;j>=0;j--){
console.log(arr[j]);
}
// arr.reverse();
console.log(arr);
}
</script>
18.對信息加密:每個字符串都轉換成Unicode碼 保證每一位字符都是五位Unicode碼---不夠的話用0補上
通過Unicode碼解密字符
1 <button onclick="fix()">加密</button> 2 <button onclick="auto()">輸入一段話加密</button> 3 <button onclick="decode()">解密</button> 4 <script type="text/javascript"> 5 function fix(){ 6 // 轉換520 1314 7 var num = "520 1314"; 8 //分解為每一個單個的字符 9 num = num.split(""); 10 //把每一個元素都轉換成Unicode碼 並且存入到原數組中 11 for(i=0;i<num.length;i++){ 12 num[i]= "000"+num[i].charCodeAt(); 13 } 14 console.log(num); 15 16 //轉換漢字 “今天八點,不見不散” 17 var word = "今天八點,不見不散"; 18 word = word.split(""); 19 for(i=0;i<word.length;i++){ 20 word[i]= word[i].charCodeAt(); 21 } 22 console.log(word); 23 } 24 25 function auto(){ 26 var input = prompt("請輸入一段話:"); 27 // console.log(input.length); 28 // console.log("25715".length); 29 30 var morse = input.split(""); 31 // console.log(morse); 32 for(i=0;i<morse.length;i++){ 33 //獲取字符串有幾位 34 if(String(morse[i].charCodeAt()).length==1){ 35 morse[i]="0000"+morse[i].charCodeAt(); 36 } 37 if(String(morse[i].charCodeAt()).length==2){ 38 morse[i]="000"+morse[i].charCodeAt(); 39 } 40 if(String(morse[i].charCodeAt()).length==3){ 41 morse[i]="00"+morse[i].charCodeAt(); 42 } 43 if(String(morse[i].charCodeAt()).length==4){ 44 morse[i]="0"+morse[i].charCodeAt(); 45 } 46 if(String(morse[i].charCodeAt()).length==5){ 47 morse[i]=morse[i].charCodeAt(); 48 } 49 } 50 console.log(morse); 51 } 52 function decode(){ 53 //獲取到輸入的五位數的密碼 54 var input = prompt("請輸入一個五位數的Unicode碼,不夠的用0補齊"); 55 password =String.fromCharCode(input); 56 console.log(password); 57 } 58 59 var msg="今晚八點,不見不散w123"; 60 function encode(msg){ 61 for (var i = 0,code ="";i<msg.length;i++){ 62 var u =msg.charCodeAt(i); 63 code += (u+100000+"").slice(1);//u是每個數的Unicode碼,把u加上100000再把1去掉第一位一,這種方法最多只能有一位 64 } 65 return code; 66 } 67 var code = encode(msg); 68 console.log(code); 69 70 function decode2(code){ 71 var information = n0 (); 72 for(i=0;i<code.length;i+=5){ 73 information[i]= code.slice(i,i+5)+"\t"; 74 } 75 console.log(information); 76 } 77 var information = decode2(code); 78 console.log(information); 79 80 </script> 81
19. 有一對幼兔,幼兔1個月后長成小兔,小兔1個月后長成成兔並生下一對幼兔,問幾年后有多少對兔子,幼兔、小兔、成兔對數分別是多少。
var a,b,c,sum; for(var i=1;i<=12;i++){ //第一個月的時候 if(i==1){ a = 1; b = 0; c = 0; sum = 1; }else{ c = c + b; b = a; a = c; sum = a + b + c; } document.write(i+"個月后有幼兔:"+a+"對,小兔:"+b+"對,成兔:"+c+"對;一共:"+sum+"對。")
20.實現斐波拉切數列 1 1 2 3 5 8 13 21 特點:每前兩個數相加等於第三個數, 前兩 個數比較特殊,從第三個數開始。
<script type="text/javascript"> var num1 = 1; var num2 = 1; var sum = 0; for(var i=0;i<5;i++){ sum = num1 + num2; num1 = num2; num2 = sum; } document.write(sum); sum = sum.toString(); document.write(sum); </script>
