- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我必须读取一个文件,分配一个大小为 k 的数组,并将 k 个最大的数字存储在数组中。我知道如何扫描和读取文件并对它进行排序,但我不知道如何将它们链接在一起。如果有人能帮助我解决这个问题,我将非常高兴!
我尝试过 strlen、sizeof、fscanf 的循环计数,但没有一个起作用。带有 ??? 的部分我不知道该放什么。一般来说,我会放置一定数量的元素,但在这种情况下,文件中的元素数量是未知的。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
int main(int argc, char *argv[])//
{
FILE *iFile;
int k = atoi(argv[1]);//convert strings into int
int i = 0, j = 0, n = 0, temp = 0;
int *arr = (int *)malloc(k * sizeof(int));//allocate size k in an array
iFile = fopen("a.txt", "r");
if (iFile == NULL)
return -1;
while (feof(iFile) <= 0)
{
fscanf(iFile, "%d", arr);
//find number of elements since I have to compare all the numbers with each other
}
//reverse
for (i = 0; i < ??? - 1; i++) //Loop for descending ordering
{
for (j = 1; j <= ??? - 1; j++) //Loop for comparing other values
{
if (arr[j] < arr[i]) //Comparing other array elements
{
temp = arr[i]; //Using temporary variable for storing last temp
arr[i] = arr[j]; //replacing temp
arr[j] = temp; //storing last temp
}
}
}
for (i = 0; i < k; i++) //Loop for printing array
data after sorting
{
printf("%d\n", arr[i]); //Printing data
}
free(arr);
fclose(iFile);
return 0;
}
最佳答案
这里有一个建议,当你我使用排序数组时,在我的例子中按升序排列,因为这看起来更“自然”(使用降序排列几乎没有任何改变)。
为了对“k”个第一个值进行排序,我使用 stdlib 中的 qsort 和函数 comp 来进行所需的比较。
主要是函数insert,因为数组是排序的,所以可以首先搜索在哪里插入新元素,复杂度为log2(k),但之后可能需要移动元素已经将元素呈现了 1 个位置来为新元素创建位置,因此我更喜欢同时进行搜索和移动。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
/* for qsort */
int comp(const void * p1, const void * p2)
{
return (*((int *) p1) - *((int *) p2));
}
/* insert v in arr having sz elts */
void insert(int * arr, int v, int sz)
{
if (v > arr[0]) {
/* search and move elts to let a hole for the new elt */
for (int i = 1; i != sz; ++i) {
if (v <= arr[i]) {
/* place it in the hole */
arr[i - 1] = v;
return;
}
arr[i - 1] = arr[i];
}
/* v is the greater value */
arr[sz - 1] = v;
}
}
int main(int argc, char *argv[])
{
int k;
FILE * iFile;
int * arr;
if ((argc != 3) || (sscanf(argv[1], "%d", &k) != 1))
fprintf(stderr, "Usage: %s <number of value> <file>\n", *argv);
else if (k < 1)
fprintf(stderr, "<number of value> must be greater than 0\n");
else if ((iFile = fopen(argv[2], "r")) == NULL)
fprintf(stderr, "cannot open '%s'\n", argv[2]);
else if ((arr = malloc(k * sizeof(int))) == NULL)
fprintf(stderr, "cannot allocate an array of %d in\n", k);
else {
/* read first 'k' values */
int i;
for (i = 0; i != k; ++i) {
if (fscanf(iFile, "%d", &arr[i]) != 1) {
fprintf(stderr, "invalid file or too few values in\n");
fclose(iFile);
return -1;
}
}
/* sort them */
qsort(arr, k, sizeof(int), comp);
/* manage all the next values */
int v;
while (fscanf(iFile, "%d", &v) == 1)
insert(arr, v, k);
fclose(iFile);
/* print result */
for (i = 0; i != k; ++i)
printf("%d ", arr[i]);
putchar('\n');
free(arr);
return 0;
}
return -1;
}
编译和执行:
pi@raspberrypi:/tmp $ gcc -pedantic -Wextra -Wall k.c
pi@raspberrypi:/tmp $ cat a.txt
12 78 6 2 9 56 3 45 21 0 1 56 0
pi@raspberrypi:/tmp $ ./a.out 10 a.txt
2 3 6 9 12 21 45 56 56 78
pi@raspberrypi:/tmp $ ./a.out 3 a.txt
56 56 78
pi@raspberrypi:/tmp $ ./a.out 1 a.txt
78
在valgrind下执行:
pi@raspberrypi:/tmp $ valgrind ./a.out 10 a.txt
==2217== Memcheck, a memory error detector
==2217== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==2217== Using Valgrind-3.13.0 and LibVEX; rerun with -h for copyright info
==2217== Command: ./a.out 10 a.txt
==2217==
2 3 6 9 12 21 45 56 56 78
==2217==
==2217== HEAP SUMMARY:
==2217== in use at exit: 0 bytes in 0 blocks
==2217== total heap usage: 4 allocs, 4 frees, 5,512 bytes allocated
==2217==
==2217== All heap blocks were freed -- no leaks are possible
==2217==
==2217== For counts of detected and suppressed errors, rerun with: -v
==2217== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 6 from 3)
关于c - 在 C 中,我在将文件中的元素从最大到最小排序的算法上遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55417659/
我想做的是让 JTextPane 在 JPanel 中占用尽可能多的空间。对于我使用的 UpdateInfoPanel: public class UpdateInfoPanel extends JP
我在 JPanel 中有一个 JTextArea,我想将其与 JScrollPane 一起使用。我正在使用 GridBagLayout。当我运行它时,框架似乎为 JScrollPane 腾出了空间,但
我想在 xcode 中实现以下功能。 我有一个 View Controller 。在这个 UIViewController 中,我有一个 UITabBar。它们下面是一个 UIView。将 UITab
有谁知道Firebird 2.5有没有类似于SQL中“STUFF”函数的功能? 我有一个包含父用户记录的表,另一个表包含与父相关的子用户记录。我希望能够提取用户拥有的“ROLES”的逗号分隔字符串,而
我想使用 JSON 作为 mirth channel 的输入和输出,例如详细信息保存在数据库中或创建 HL7 消息。 简而言之,输入为 JSON 解析它并输出为任何格式。 最佳答案 var objec
通常我会使用 R 并执行 merge.by,但这个文件似乎太大了,部门中的任何一台计算机都无法处理它! (任何从事遗传学工作的人的附加信息)本质上,插补似乎删除了 snp ID 的 rs 数字,我只剩
我有一个以前可能被问过的问题,但我很难找到正确的描述。我希望有人能帮助我。 在下面的代码中,我设置了varprice,我想添加javascript变量accu_id以通过rails在我的数据库中查找记
我有一个简单的 SVG 文件,在 Firefox 中可以正常查看 - 它的一些包装文本使用 foreignObject 包含一些 HTML - 文本包装在 div 中:
所以我正在为学校编写一个 Ruby 程序,如果某个值是 1 或 3,则将 bool 值更改为 true,如果是 0 或 2,则更改为 false。由于我有 Java 背景,所以我认为这段代码应该有效:
我做了什么: 我在这些账户之间创建了 VPC 对等连接 互联网网关也连接到每个 VPC 还配置了路由表(以允许来自双方的流量) 情况1: 当这两个 VPC 在同一个账户中时,我成功测试了从另一个 La
我有一个名为 contacts 的表: user_id contact_id 10294 10295 10294 10293 10293 10294 102
我正在使用 Magento 中的新模板。为避免重复代码,我想为每个产品预览使用相同的子模板。 特别是我做了这样一个展示: $products = Mage::getModel('catalog/pro
“for”是否总是检查协议(protocol)中定义的每个函数中第一个参数的类型? 编辑(改写): 当协议(protocol)方法只有一个参数时,根据该单个参数的类型(直接或任意)找到实现。当协议(p
我想从我的 PHP 代码中调用 JavaScript 函数。我通过使用以下方法实现了这一点: echo ' drawChart($id); '; 这工作正常,但我想从我的 PHP 代码中获取数据,我使
这个问题已经有答案了: Event binding on dynamically created elements? (23 个回答) 已关闭 5 年前。 我有一个动态表单,我想在其中附加一些其他 h
我正在尝试找到一种解决方案,以在 componentDidMount 中的映射项上使用 setState。 我正在使用 GraphQL连同 Gatsby返回许多 data 项目,但要求在特定的 pat
我在 ScrollView 中有一个 View 。只要用户按住该 View ,我想每 80 毫秒调用一次方法。这是我已经实现的: final Runnable vibrate = new Runnab
我用 jni 开发了一个 android 应用程序。我在 GetStringUTFChars 的 dvmDecodeIndirectRef 中得到了一个 dvmabort。我只中止了一次。 为什么会这
当我到达我的 Activity 时,我调用 FragmentPagerAdapter 来处理我的不同选项卡。在我的一个选项卡中,我想显示一个 RecyclerView,但他从未出现过,有了断点,我看到
当我按下 Activity 中的按钮时,会弹出一个 DialogFragment。在对话框 fragment 中,有一个看起来像普通 ListView 的 RecyclerView。 我想要的行为是当
我是一名优秀的程序员,十分优秀!