統計數字問題演算法
簡述:就是你輸入一個頁數,檢視從1到你輸入的這一頁,0到9個出現的次數。
有兩種演算法:(根據需要而定)
(1)使用計數,即:用一個for迴圈語句和一個while來統計這幾個數出現的次數
他使用簡單,容易理解,但是效率太低,對於一個小整數而言,他是很好的一個算嗎,但是對於一個100萬以上的數,他的時間往往讓人無法等待,百萬的數就是幾秒中。而千萬級的數,就是幾十秒甚至幾分鐘,,上億時,他的時間就是3或4分鐘。程式碼如下:
public static void tongji1() { int []tongji=new int[10]; Scanner scanner=new Scanner(System.in); long yema=scanner.nextLong(); long j1=System.currentTimeMillis(); for(int i=1;i<=yema;i++) { int temp=i; while(temp>0) { int n=temp%10; tongji[n]++; temp/=10; } } long j2=System.currentTimeMillis(); System.out.println(j2-j1); }
(2)他不再同二重迴圈了,因為i她的時間複雜度太高了,(N方),而他的時間複雜度較低。
他不容易理解,但是效率高,程式碼長,他計算一個上億的,就是不再是用毫秒單位計算了,往往使用微妙,上衣的就是幾百圍標,相當於0毫秒,
程式碼如下:
有什麼問題,提出來。能力有限。見諒public static void tongji2() { int []tongji=new int[10]; Scanner scanner=new Scanner(System.in); long yema=scanner.nextLong(); long j1=System.currentTimeMillis(); int len=0;//計算她的長度-1 long temp=yema; //將設頁碼是從0開始,並且前面有多餘的0,以你輸入的為主:990:000-990 tongji[0]=-1; while(temp>=10) { len++; //減去多餘的0 tongji[0]-=Math.pow(10, len); temp/=10; } jsshu(tongji, len, yema); long j2=System.currentTimeMillis(); System.out.println(j2-j1); System.out.println(Arrays.toString(tongji)); } public static void jsshu(int []a,int len,long yema) { if(yema<10) { for(int i=0;i<=yema;i++) { a[i]++; } return; } else { //10的幾次放 long zuida=(long) Math.pow(10, len); //統計你輸入的輸的0-9基本變化量,公式:(len-1)*10^(len-2) long bhl=(long) (len*zuida/10); int max=(int) (yema/zuida); long yushu=yema%zuida; for(int i=0;i<max;i++) { a[i]+=zuida; } for(int i=0;i<10;i++) { a[i]+=max*bhl; } if(yushu==0) { a[0]+=len; a[max]++; } else { int l=0; //餘數,有沒有少加0;例如70001,餘數1,他中間的令就沒有價 while((zuida/=10)>yushu) { l++; } a[0]+=(l*(yushu+1)); a[max]+=(yushu+1); jsshu(a, len-l-1, yushu); } } }
相關推薦
演算法C++實現(有註釋):統計數字某位數的個數,用隨機函式產生100個[0,99]範圍內的隨機整數, 統計數字的個位上的數字分別為0,1,2,3,4,5,6,7,8,9的數的個數,並打印出來。
#include<iostream> #include<cstdlib>// #include <stdlib.h> void srand( unsigned seed ); //功能: 設定rand()隨機序列種子。對於給定的種子se
NOI2.4基本演算法之分治 統計數字 分析----換一種思路
一、題目描述 總時間限制: 1000ms 記憶體限制: 65536kB描述 某次科研調查時得到了n個自然數,每個數均不超過1500000000(1.5*109)。已知不相同的數不超過10000個
統計數字問題-演算法實現(暴力統計法)
這是一個暴力統計法對數字問題的演算法實現。 在編輯程式碼的過程中遇到了if語句在進行每個數字的分拆時遇到了1的個數缺少的問題,其最高為的1的個數缺少統計。 經過查明是因為if的使用只是基於判斷使用,而我的程式碼中要使用到的是迴圈計數。因而要使用while來實現迴圈。 下面
演算法設計與分析: 1-1 統計數字問題
1-1 統計數字問題 問題描述 一本書的頁碼從自然數1 開始順序編碼直到自然數n。書的頁碼按照通常的習慣編排, 每個頁碼都不含多餘的前導數字0。例如,第6 頁用數字6 表示,而不是06 或006 等。數 字計數問題要求對給定書的總頁碼n,計算出書的全
統計數字問題演算法
簡述:就是你輸入一個頁數,檢視從1到你輸入的這一頁,0到9個出現的次數。 有兩種演算法:(根據需要而定) (1)使用計數,即:用一個for迴圈語句和一個while來統計這幾個數出現的次數 他使用簡單,容易理解,但是效率太低,對於一個小整數而言,他是很好的一個算嗎,但是對於一
統計數字問題[演算法設計與分析]
/* * NumberCount.cpp * Author: MagicYun */ #include <cstdio>#include <cstdlib>#include <iostream> using namespace std; i
演算法設計之補零遞迴法(統計數字問題)
問題:給定一個數N求從1到N的這N個數中0,1,2,3,4,5,6,7,8,9這10個數字出現的次數。注意,所有的數字沒有前導的0。 如6要寫成6,而不是 006 ,06這種形式 思路1:也就是最簡
演算法-------統計數字問題
統計數字問題 一本書的頁碼重自然數1開始順序編碼直到自然數n。書的頁碼按照通常的習慣編排,每個頁碼都沒有多餘的前導數字0。 要求,給一個輸入檔案,統計他的頁碼(為了方便起見,假定每一行為一頁)。 然後,計算出書的全部頁碼用了多少次0,1,2,3...9。 最後將結果儲存至
【LintCode: 3. 統計數字】演算法題解析
開發十年,就只剩下這套架構體系了! >>>
【C語言】統計數字在排序數組中出現的次數
語言 個數 統計 ret r+ () class tdi times //數字在排序數組中出現的次數。 //統計一個數字在排序數組中出現的次數。比如:排序數組{1,2,3,3,3,3,4,5}和數字3,因為3出現了4次,因此輸出4. #include <stdio
[luoguP1097] 統計數字(水)
ostream nbsp org urn tchar return blog print main 傳送門 這麽水的題,也只有提高組第一題了吧 代碼 #include <cstdio> #include <iostream>
luogu P1097 統計數字
font for -1 string name int esp space light 題目描述 某次科研調查時得到了n個自然數,每個數均不超過1500000000(1.5*10^9)。已知不相同的數不超過10000個,現在需要統計這些自然
洛谷—— P1097 統計數字
noi target targe print include else show class http https://www.luogu.org/problem/show?pid=1097 題目描述 某次科研調查時得到了n個自然數,每個數均不超過1500000000(
統計數字
統計 clu show 提示 自然 http esp clas ++ 鏈接:http://ybt.ssoier.cn:8088/problem_show.php?pid=1239 時間限制: 1000 ms 內存限制: 65536 KB 【題目描述】
常用統計數字特征及解析工具
log 隨機變量 函數定義 泊松分布 相關 blog 數值 我們 直接 母函數 母函數定義 考慮只取非負值的離散型隨機分布,如二項分布,泊松分布,幾何分布等,稱之為整值隨機變量。而有一種變換方法比較適於變換,即母函數法。 對於整值隨機變量 \(\xi\) ,根據佚名統計學家
題:統計數字出現次數。 隨機生成100個數字,數字範圍從1到10,統計每個數字出現的次數並打印到控制臺。
pre 方向 system 繼續 void pub arr static 遍歷 public static void main(String[] args) { printCount(getNumList());}private static ArrayList&l
Uva1640(統計數字出現的次數)
還要 eof ring size set include algorithm swa ios 題意: 統計兩個整數a,b之間各個數字(0~9)出現的次數,如1024和1032,他們之間的數字有1024 1025 1026 1027 1028 1029 1030 1031 1
統計數字問題(10^9的大數)
問題描述:一本書的頁碼從自然數1 開始順序編碼直到自然數n。書的頁碼按照通常的習慣編排, 每個頁碼都不含多餘的前導數字0。例如,第6 頁用數字6 表示,而不是06 或006 等。數 字計數問題要求對給定書的總頁碼n,計算出書的全部頁碼中分別用到多少次數字0,1, 2,…,9。 資料輸入
IP地址轉換成Long型數字演算法和原理(全網最細!!)
將ip地址轉換成數字地址的時候是我做一個歸屬地查詢的專案是碰見的,開始我並不明白將IP轉換成數字地址的原理,可能老師上課講了但是沒有好好聽,我覺得想理解下面演算法就應該理解IP地址和數字地址的原理(菜鳥專用(^_^)) IP地址一般是一個32位的二進位制數意思就是如果將IP地
NOIP2007統計數字(提高組T1)————STL
題解:本題資料較大,一些排序演算法不可行。因此用sort便是很好的方法。 程式碼如下: #include<iostream> #include<algorithm> using namespace std; int a[222222]