c - 计算元素频率的C程序
问题描述
我有这个代码可以从用户输入的数字中找到数字的出现。我的问题是如何首先按用户输入数字,然后要求用户在序列中找到他的号码。如果这个问题很愚蠢,我很抱歉,但我只是一个试图自学编程的初学者:) 非常感谢你的帮助!
这是我当前的代码:
int main()
{
int num, remainder, k, count = 0;
printf("Which number do you want to find: \n");
scanf("%d", &k);
while(1)
{
printf("Enter numbers(end by pressing 0): ");
scanf("%d", &num);
remainder=num;
if(remainder==k)count++;
if(remainder==0) break;
}
printf("\Number %d occurs %d times.\n", k, count);
getch();
return 0;
}
这是我尝试过的:
int main()
{
int num, remainder, k, count = 0;
while(1)
{
printf("Enter numbers(end by pressing 0): ");
scanf("%d", &num);
remainder=num;
if(remainder==k)count++;
if(remainder==0) break;
}
printf("Which number do you want to find: \n");
scanf("%d", &k);
printf("\Number %d occurs %d times.\n", k, count);
getch();
return 0;
解决方案
对于您的任务,您需要称为单链表的数据结构。理论上它没有限制,您可以输入任何数字序列,直到输入 0。
这是一个演示程序:
#include <stdio.h>
#include <stdlib.h>
struct node
{
int number;
struct node *next;
};
struct sequence
{
struct node *head;
struct node *tail;
};
int append( struct sequence *seq, int number )
{
struct node *new_node = malloc( sizeof( *new_node ) );
int success = new_node != NULL;
if( success )
{
new_node->number =number;
new_node->next = NULL;
if ( seq->head == NULL )
{
seq->head = new_node;
}
else
{
seq->tail->next = new_node;
}
seq->tail = new_node;
}
return success;
}
size_t count( const struct sequence *seq, int number )
{
size_t cnt = 0;
for ( const struct node *current = seq->head; current != NULL; current = current->next )
{
if ( current->number == number ) ++cnt;
}
return cnt;
}
void clear( struct sequence *seq )
{
while ( seq->head != NULL )
{
struct node *current = seq->head;
seq->head = seq->head->next;
free( current );
}
seq->tail = NULL;
}
int main(void)
{
struct sequence seq = { .head = NULL, .tail = NULL };
printf( "Enter numbers (end by entering 0): " );
int number;
while ( scanf( "%d", &number ) == 1 && number != 0 && append( &seq, number ) );
number = 0;
printf( "Which number do you want to find: " );
scanf( "%d", &number );
printf( "\nNumber %d occurs %zu times.\n", number, count( &seq, number ) );
clear( &seq );
return 0;
}
它的输出可能看起来像
Enter numbers (end by entering 0): 1 2 3 4 5 6 7 8 9 1 8 7 6 5 4 3 2 1 0
Which number do you want to find: 1
Number 1 occurs 3 times.
推荐阅读
- javascript - 在 mouseout 按钮上禁用
- rust - 如何复制终端输出并将其放入文件中?
- ubuntu - 成功安装后如何处理我的 SSL Certbot 证书
- javascript - 在 2 个 HTML 页面之间传递 JavaScript 数据值
- reactjs - Service Worker Network-Only for a single route
- bash - 有没有一种很好的方法可以将文件中具有特定字符(不是文件名)的 .txt 文件移动到另一个目录?
- database - JPA外键限制删除
- python - 如何在 Python 中构造这些图形?
- spring - 如何区分具有相同状态码但响应正文不同的两个响应?
- mongodb - 如何从 mongoDB 中的另一个数据库 $lookup?