1. 程式人生 > 其它 >IOS 攝像頭採集之 AVCaptureDevice 簡單使用 (Swift)

IOS 攝像頭採集之 AVCaptureDevice 簡單使用 (Swift)

技術標籤:c++c語言

數數字(陣列與函式的運用)


前言

本人是一名計算機新人,在去年下半年初識C語言,然而到現在進度一直很慢,對許多東西知其然而不知其所以然,希望通過寫部落格的方式來督促自己並將學習到的知識紮實掌握。

一、原型題

不喜英文題目的可自取翻譯後的結果~

1225 Digit Counting

Trung is bored with his mathematics homeworks. He takes a piece of chalk and starts writing a sequence of consecutive integers starting with 1 to N (1 < N < 10000). After that, he counts the number of times each digit (0 to 9) appears in the sequence. For example, with N = 13, the sequence is: 12345678910111213 In this sequence, 0 appears once, 1 appears 6 times, 2 appears 2 times, 3 appears 3 times, and each digit from 4 to 9 appears once. After playing for a while, Trung gets bored again. He now wants to write a program to do this for him. Your task is to help him with writing this program. Input The input file consists of several data sets. The first line of the input file contains the number of data sets which is a positive integer and is not bigger than 20. The following lines describe the data sets. For each test case, there is one single line containing the number N. Output For each test case, write sequentially in one line the number of digit 0, 1, . . . 9 separated by a space.

Sample Input

2

3

13

Sample Output

0 1 1 1 0 0 0 0 0 0

1 6 2 2 1 1 1 1 1 1

二、翻譯後

Trung對他的數學作業感到厭煩。他拿起一支粉筆,開始寫一個從1到N的連續整數序列(1 < N < 10000)。然後,他計算每個數字(0到9)在序列中出現的次數。例如,當N = 13時,序列為:12345678910111213。0出現一次,1出現6次,2出現2次,3出現3次,從4到9的每一位都出現一次。玩了一會兒之後,Trung又覺得無聊了。現在,他想編寫一個程式來實現這一點。你的任務是幫助他寫這個程式。輸入檔案由幾個資料集組成。輸入檔案的第一行包含不大於20的正整數資料集的數量。下面幾行描述了資料集。對於每個測試用例,都有一行包含數字n。輸出每個測試用例,按順序在一行中寫入數字0,1,…9用空格隔開。

樣例輸入
2

3

13

樣例輸出

0 1 1 1 0 0 0 0 0 0

1 6 2 2 1 1 1 1 1 1

三、解法

1.解法(有函式)

程式碼如下(示例):

#include <iostream>

void solve(int num) {
    int count[10] = { 0 };
    for (int i = 1; i <= num; ++i) {
        int n = i;
        while (n) {
            ++count[n % 10];
            n /= 10;
        }
    }
    for (int i = 0; i < 10; ++i) std::cout << count[i] << ' ';
}

int main() {
    int cases;
    std::cin >> cases;
    while (cases) {
        --cases;
        int num;
        std::cin >> num;
        solve(num);
        std::cout << std::endl;
    }
}

2.解法(無函式)

程式碼如下(示例):

#include<iostream>

int main()
{
	int n;
	std::cin >> n;
	while (n--)
	{
		int a[10] = { };
		int x; 
		std::cin >> x;
		for (int i{ 1 }; i <= x; ++i)
		{
			int j{ i };
			while (j > 0)
			{
				a[j % 10]++;
				j /= 10;
			}
		}
		for (int i{ 0 }; i <= 8; i++)
			std::cout << a[i] << " ";
		std::cout << a[9] << std::endl;
	}
	return 0;
}

四、實現截圖

第一行輸入我們要輸入多少組數,我們輸入了5,即:1、13、111、1024、666這六個數


總結

這個題不難,就陣列與函式的運用,即使初識C語言也能夠完全搞懂這道題以及這道題的C++用法。

希望通過這道題給和我相同的初學者們一點我的想法。

當然,這道題還有許許多多的實現程式碼,那些程式碼比我所寫好的大有人在。在這裡也不探討效率問題了。

首次寫部落格,希望各位大佬多多擔待。