UVA1225DigitCounting(简单哈希表)

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 ?le consists of several data sets. The ?rst line of the input ?le 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

//问题连接https://vj.e949.cn/896ed59b7a237fb98e750c3414895dce?v=1544848571

//问题其实就是求1到n的连续数字序列中1~9出现的次数,这里我选择将数字序列存在一个数组里,然后单个数组元素处理,出现相应的数字的话就让对应哈希表

//下标的元素加一。挺简单的题,代码如下

#include <iostream>
#include <cstring>
#define maxn 10005
using namespace std;
int ans[maxn];
int num[10];
int main() {
    int n,k;
    while(cin>>n){
        while(n--)
        {
    cin>>k;
    for(int i=0;i<10;i++)
    num[i]=0;
    for(int i=1; i<=k; i++)
        ans[i-1]=i;
    for(int j=0; j<k; j++) {
        if(ans[j]<10)
            num[ans[j]]++;
        else {
            int k=ans[j];
            for(; k!=0;) {
                num[k%10]++;
                k/=10;
            }
        }
    }
    for(int i=0; i<=9; i++) {
        if(i==9)
            cout<<num[i]<<endl;
        else cout<<num[i]<<" ";
    }
}
}
return 0;
}

原文地址:https://www.cnblogs.com/mlcn-2000/p/10134687.html

时间: 2024-10-18 17:53:49

UVA1225DigitCounting(简单哈希表)的相关文章

【算法导论】简单哈希表的除法实现

哈希表,又名散列表,hashtable...云云,看似很高大上,其实不过是直接寻址的延伸而已.直接寻址为何物,看一个数组:a[10],那么取其中一个元素a[1],这就是直接寻址,直接去这个a+1的地址上,就找到了这个数值,时间复杂度为O(1).而哈希表的目的就是要让查找的时间复杂度尽量往O(1)上靠. 一.哈希表的最简单形式 假如有10000个数,比如0~9999,是可能出现的数字的集合,我们现在要将一段时间内,出现的数字,全部保存起来.如果出现的数字都不重复的情况下,我们可以使用一个长度为10

C语言-简单哈希表(hash table)

腾讯三面的时候,叫我写了个哈希表,当时紧张没写好···结果跪了··· 回来后粪发涂墙,赶紧写了一个! 什么都不说了···先让我到厕所里面哭一会··· %>_<% 果然现场发挥,以及基础扎实才是important的! 用链地址法解决冲突的哈希表(C语言,VS2008编写.测试): 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <math.h> 4 #include <string.h>

哈希表中的查找

基本概念 哈希表(hash table):又称散列表,其基本思路是,设要存储的元素个数是n,设置一个长度为m的连续存储单元,以每个元素的关键字作为自变量,通过哈希函数(h(k))把k映射到一个内存单元,并把该元素存在这个内存单元中,把像这样构造的线性表存储结构称为哈希表. 哈希冲突(hash collisions):在构建哈希表时,出现两个不同关键词对应相同的哈希值,这种现象称作哈希冲突. 装填因子(loading factor):设哈希表空间大小为n,填入表中元素个数为m,则$α=/frac{

哈希表的简单操作

哈希表中,关键值通过哈希函数映射到数组上,查找时通过关键值直接访问数组.哈希表的关键问题在于哈希函数的构造和解决冲突的方法. 下面采用最简单的线性探测展示一下哈希表的基本操作: 1 //Hashtable 2 class HashTable { 3 private: 4 string *elem; 5 int size; 6 public: 7 HashTable() { 8 size = 2000; 9 elem = new string[size]; 10 for (int i = 0; i

哈希表的简单实现

下面这个散列表的实现来自K&R,很经典.在其他场景中遇到的实现更复杂,基本原理不变,只是在hash算法,或者在快速查询上做了优化. #include <stdio.h> #include <stdlib.h> //具有相同hash值构成的链表 struct nlist{ struct nlist * next; char * name;  //key-定义的名字 char * defn;  //value-替换文本 }; #define HASHSIZE 101  //桶的

简单的哈希表映射试验

对于很长的线性数据结构,进行搜索,可以用哈希表的方式. #include <iostream> #include <stdio.h> using namespace std; //数据类型 //注意:每一个数据节点,须绑定一个唯一的Key值 //这一点可以简单理解为:如果是工人信息,可以使用工号:学生信息,可以用学号 //设备信息,可以用设备编号 struct info {     int id;     char name[10]; }; info data[10]={0};//

简单的哈希表实现 C语言

简单的哈希表实现 简单的哈希表实现 原理 哈希表和节点数据结构的定义 初始化和释放哈希表 哈希散列算法 辅助函数strDup 哈希表的插入和修改 哈希表中查找 哈希表元素的移除 哈希表打印 测试一下 这是一个简单的哈希表的实现,用c语言做的. 原理 先说一下原理. 先是有一个bucket数组,也就是所谓的桶. 哈希表的特点就是数据与其在表中的位置存在相关性,也就是有关系的,通过数据应该可以计算出其位置. 这个哈希表是用于存储一些键值对(key -- value)关系的数据,其key也就是其在表中

leetcode #1 twoSum问题:简单实用哈希表

因为不是计算机专业的,算法基础有点差,所以最近开始在leetcode上刷刷题补一补. #1 问题链接:twoSum 问题描述: Given an array of integers, find two numbers such that they add up to a specific target number. The function twoSum should return indices of the two numbers such that they add up to the

简单好用的哈希表

哈希表板子 以后考试不要总自己发挥妄图创造模板.. 1 struct Hsh{ 2 int head[N1],to[M1],nxt[M1],val[M1],cte; 3 void ins(int x,int w) 4 { 5 int u=x%maxn,j,v; 6 for(j=head[u];j;j=nxt[j]) 7 { 8 v=to[j]; 9 if(v==x) return; 10 } 11 cte++; to[cte]=x; nxt[cte]=head[u]; 12 head[u]=ct