用c语言编写一个程序,个数统计:给定一个k位整数,请编写程序统计每种不同的数字出现的次数。例如:给定N = 100311,则有2个0,3个1,和1个3。 输入格式: 每个输入包含1个测试用例,即一个不超过1000位的正整数N。 输出格式: 对N中每一种不同的个位数字,以D:M的格式在一行中输出该位数字D及其在N中出现的次数M。要求按D的升序输出。 输入样例: 100311 输出样例: 0:2 1:3 3:1
时间: 2023-03-19 11:21:44 浏览: 237
以下是用C语言编写的解决方案,可以实现给定一个k位整数,统计每种不同的数字出现的次数,并以指定格式输出。
```c
#include <stdio.h>
#include <string.h>
#define MAX_N 1000
int main()
{
char num[MAX_N];
int count[10] = {0}; // 用来记录0-9数字出现的次数
scanf("%s", num);
int len = strlen(num);
for (int i = 0; i < len; i++) {
int digit = num[i] - '0';
count[digit]++;
}
for (int i = 0; i < 10; i++) {
if (count[i] > 0) {
printf("%d:%d ", i, count[i]);
}
}
printf("\n");
return 0;
}
```
这段代码首先读入一个不超过1000位的正整数N,然后定义一个大小为10的数组count来记录每个数字出现的次数。接着遍历输入的数字,每遇到一个数字就在count数组对应的位置上加1。最后遍历count数组,输出出现次数大于0的数字及其对应的出现次数。
相关问题
使用C语言编写程序给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。 你可以按任意顺序返回答案。输入整数N
在C语言中,可以通过创建一个哈希表来存储遍历数组时的元素值和对应的索引,以实现快速查找和为为目标值的两个整数。下面是一种可能的实现方法:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义哈希表节点结构体
typedef struct HashNode {
int key;
int value;
struct HashNode *next;
} HashNode;
// 定义哈希表结构体
typedef struct {
HashNode **buckets;
int size;
} HashTable;
// 创建哈希表
HashTable* createHashTable(int size) {
HashTable *hashTable = (HashTable*)malloc(sizeof(HashTable));
hashTable->size = size;
hashTable->buckets = (HashNode**)malloc(sizeof(HashNode*) * size);
for (int i = 0; i < size; i++) {
hashTable->buckets[i] = NULL;
}
return hashTable;
}
// 释放哈希表内存
void freeHashTable(HashTable *hashTable) {
for (int i = 0; i < hashTable->size; i++) {
HashNode *node = hashTable->buckets[i];
while (node) {
HashNode *temp = node;
node = node->next;
free(temp);
}
}
free(hashTable->buckets);
free(hashTable);
}
// 插入键值对到哈希表
void insert(HashTable *hashTable, int key, int value) {
int index = key % hashTable->size;
HashNode *newNode = (HashNode*)malloc(sizeof(HashNode));
newNode->key = key;
newNode->value = value;
newNode->next = hashTable->buckets[index];
hashTable->buckets[index] = newNode;
}
// 在哈希表中查找键对应的值
int search(HashTable *hashTable, int key) {
int index = key % hashTable->size;
HashNode *node = hashTable->buckets[index];
while (node) {
if (node->key == key) {
return node->value;
}
node = node->next;
}
return -1; // 未找到
}
// 返回数组中两个整数的和为target的下标
int* twoSum(int* nums, int numsSize, int target, int* returnSize) {
HashTable *hashTable = createHashTable(numsSize);
int *result = (int*)malloc(sizeof(int) * 2);
for (int i = 0; i < numsSize; ++i) {
int complement = target - nums[i];
int complementIndex = search(hashTable, complement);
if (complementIndex != -1) {
result[0] = complementIndex;
result[1] = i;
*returnSize = 2;
freeHashTable(hashTable);
return result;
}
insert(hashTable, nums[i], i);
}
*returnSize = 0;
freeHashTable(hashTable);
return result;
}
int main() {
int nums[] = {2, 7, 11, 15};
int target = 9;
int returnSize = 0;
int* indices = twoSum(nums, sizeof(nums) / sizeof(nums[0]), target, &returnSize);
if (returnSize == 2) {
printf("找到的两个数的下标为: [%d, %d]\n", indices[0], indices[1]);
} else {
printf("未找到符合条件的两个数\n");
}
free(indices);
return 0;
}
```
这段代码定义了一个哈希表,并提供了创建、插入和查找的功能。`twoSum`函数利用这个哈希表来快速查找是否存在和为`target`的两个整数。如果找到,返回它们的下标;否则,返回没有找到的信息。
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回答案。用c语言编写
```c
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* twoSum(int* nums, int numsSize, int target, int* returnSize){
int* result = (int*)malloc(2*sizeof(int)); // 分配返回值数组的内存空间
*returnSize = 2; // 设置返回值数组大小为2
for(int i=0; i<numsSize; i++){
for(int j=i+1; j<numsSize; j++){ // 从下一个元素开始搜索
if(nums[i]+nums[j] == target){ // 找到符合条件的元素
result[0] = i;
result[1] = j;
return result;
}
}
}
return NULL; // 如果没有符合条件的元素,则返回NULL
}
```
阅读全文