學習程式設計的N種境界(青銅如何成為最強王者)
(素數求解的N種境界)
*引子
《俺的招聘經驗【4】:通過筆試能看出啥?》 【 思路和想法】》【對錯】
試除法+初級篩法
(需求1)||(需求2)
*試除法
境界1(需求1)
#include<stdio.h> int main() { int i,k; int count=0; for(i=100;i<=200;i++) { for(k=2;k<i;k++) { if(i%k==0) break; } if(k==i) printf("%d是素數\n",i); else printf("%d不是素數\n",i); count++; } printf("\n%4d",count); system("pause"); return 0; }
境界2(需求1)
#include<stdio.h> int main() { int i,k; int count=0; for(i=101;i<=200;i+=2) { // i= 2~i for(k=2;k<i;k++) { if(i%k==0) break; } if(k==i) printf("%d是素數\n",i); else printf("%d不是素數\n",i); count++; } printf("\n%4d",count); system("pause"); return 0; }
境界3(需求1)
#include<stdio.h> int main() { int i,k;t count=0; for(i=101;i<=200;i+=2) { for(k=2;k<i/2;k++) { if(i%k==0) break; } if(k==i) printf("%d是素數\n",i); else printf("%d不是素數\n",i); count++; } printf("\n%4d",count); system("pause"); return 0; }
境界4(需求1)
#include <stdio.h>
#include <math.h>
int main()
{
int i = 0;
int count = 0;
for(i=100; i<=200; i++)
{
int j = 0;
for(j=2; j<=sqrt(i); j++)
{
if(i%j == 0)
{
break;
}
}
if(j>sqrt(i))
{
count++;
printf("%d ", i);
}
}
printf("\ncount = %d\n", count);
return 0;
}
境界5(需求1)
#include <stdio.h>
#include <math.h>
int main()
{
int i = 0;
int count = 0;
for(i=101; i<=200; i+=2)
{
int j = 0;
for(j=2; j<=sqrt(i); j++)
{
if(i%j == 0)
{
break;
}
}
if(j>sqrt(i))
{
count++;
printf("%d ", i);
}
}
printf("\ncount = %d\n", count);
return 0;
}
&補充說明(這因該是需求1的幾種境界,需求2自己拓展)
附贈一個經典程式
#include<stdio.h>
#include<math.h>
int main()
{
int n,i,k;
printf("please enter a integer number:n=");
scanf("%d",&n);
k=sqrt(n);
for(i=2;i<=k;i++)
if(n%i==0)break;
if(i<=k)
printf("%d is not a prime number.\n",n);
else
printf("%d is a prime number.\n",n);
return 0;
}
*篩法(估計素數個數求解公式x/ln(x)誤差小於15%範圍越大,誤差越小)
*儲存容器
境界1(構造整形容器)
100~200所有素數,除去所有合數剩下的就是素數(15*15==225)
思想:篩去2,3,5,7,11,13的倍數,剩下的就是素數
境界2(布林型容器)
境界3(按位(bit)儲存)
王國維在《人間詞話》說:古之成大事業、大學問者,必經過三種境界:“昨夜西風凋碧樹。獨上西樓,望盡天涯路。”此第一境也。“衣帶漸寬終不悔,為伊消得人憔悴。”此第二境也。“眾裡尋他千百度,驀然回首,那人卻在燈火闌珊處。”此第三境也。
福爾摩斯說:“我認為人的大腦原本像一間空空的屋子,必須有選擇地用一些傢俱填滿它。只有笨蛋才把他碰到的各種各樣的破爛都塞進去。這樣的話,那些可能用得上的知識就被擠了出來;或者,充其量也只是把那些破爛同其它東西混雜在一塊兒。結果,在需要時卻難以找到了。因此,一個善於工作的人,對於將什麼東西納入自己的頭腦裡是非常仔細的。他只會容納那些工作時用得著的工具,而且將這些工具分門別類,安排得井然有序。如果認為這間屋子的牆壁富有彈性,可以隨意擴充套件,那就大錯特錯了。毫無疑問,總有一天,當你增加點滴知識時,卻把從前熟悉的知識給忘記了。因此,不要讓無用的資訊擠掉那些有用的資訊,這一點至關重要。”這句話我不敢苟同,但我卻可以這樣理解。假如將人的大腦比作電腦,福爾摩斯所說的房子就像電腦的暫存器一樣,如果將常用的知識,技能都放在暫存器裡,當然可以極大地提高效率。就像《大腦與思維》所說的那樣,人的大腦儲存空間大到無法想象,人腦的記憶容量的位元組數10後邊跟8432個零。
我認為所有的語言都是相通的,學習任何語言的思路都是相同的。想要寫出優美的文章,你得會寫出優美的句子,要寫出優美的句子,你得懂得華麗的詞藻,要懂得華麗的詞藻,你的認識許多許多字。學習程式語言亦是如此,如果一個漢字代表一行程式碼,正常本科生應該掌握3500個漢字(文科4000,漢語專業6500),那麼一個合格的程式設計師是不是也應該掌握3500行程式碼?當然這只是我的推測。但是一個合格的程式設計師小白,應該熟練的掌握學過的知識,那麼你的段位才會變高,那麼你才有可能從青銅變為最強王者。