c - 我无法处理写直方图
问题描述
我的目标是为重复数字生成直方图。该代码运行良好,直到频率大于 2。
我想我知道代码有什么问题(第 9 行),但我找不到解决它的算法。我遇到的问题是当它写直方图时,它会分离然后再次收集它。
我的输入:
5
5 6 6 6 7
输出:
6:2 6:2 6:3
但我需要的输出是
6:3
我有点看到问题,但我无法解决它。
#include <stdio.h>
int main(){
int array[25];
int i, j, num, count = 1;
scanf("%d", &num);
for (i = 0; i < num; i++) {
scanf("%d", &array[i]);
for (j = 0; j < i ; j++) {
if (array [i] == array[j]) {
count++;
printf("%d:%d ", array[i], count);
}
}
array [i] = array[j];
count = 1;
}
return 0;
}
解决方案
您试图在所有单位都被接受之前对出现次数进行计数,除非您为每个值维护一个单独的计数器,否则这是不可能的,如果输入值范围没有限制或范围很大,这又是不切实际的。
您需要先获得所有值,然后才能报告任何计数。然后对于数组中的每个值,测试该值是否更早出现,如果没有,则迭代整个数组以计算出现次数:
#include <stdio.h>
#include <stdbool.h>
int main()
{
// Get number of values
int num = 0 ;
scanf("%d", &num);
// Get all values
int array[25];
for( int i = 0; i < num; i++)
{
scanf("%d", &array[i]);
}
// For each value in array...
for( int i = 0; i < num ; i++)
{
// Check value not already counted
bool counted = false ;
for( int j = 0; !counted && j < i; j++ )
{
counted = array[j] == array[i] ;
}
// If current value has not previously been counted...
if( !counted )
{
// Count occurnaces
int count = 0 ;
for( int j = 0; j < num; j++ )
{
if( array[j] == array[i] )
{
count++ ;
}
}
// Report
printf("%d:%d ", array[i], count);
}
}
return 0;
}
对于您的示例输入,结果是:
5
5 6 6 6 7
5:1 6:3 7:1
可以合并执行counted
和count
评估的两个内部循环:
// Count occurrences of current value,
bool counted = false ;
int count = 0 ;
for( int j = 0; !counted && j < num; j++ )
{
if( array[j] == array[i] )
{
count++;
// Discard count if value occurs earlier - already counted
counted = j < i ;
}
}
// If current value has not previously been counted...
if( !counted )
{
// Report
printf("%d:%d ", array[i], count);
}
}
推荐阅读
- android - 如何使用 FCM 将链接发送到 android 应用程序
- azure - 无法将资产与 blob 关联
- c# - 在 Winforms C# 中启用拼写检查的情况下,如何在鼠标悬停在 WPF 文本框上时显示拼写错误建议弹出窗口?
- python - pandas groupby.agg 列出行为
- javafx - Javafx 按数据库值更改特定行颜色
- json - 返回 JSON 并打印出 reactJS
- javascript - 不要使用 util.inspect 记录符号
- android - 如何检查mysql数据库中的值?
- javascript - 如何在 wordpress 网站上隐藏外部 java sciprt 代码的图像
- reactjs - GraphQL Apollo:变量 $bool 的值无效“false”;预期的布尔类型;布尔值不能表示非布尔值:“false”