c++ - 在数组和循环方面需要帮助

标签 c++ arrays loops

用单下标数组解决如下问题:读入20个数,每个数都在10到100之间,包括10和100。当读取每个数字时,仅当它不是已读取数字的拷贝时才打印它。提供所有 20 个数字都不同的“最坏情况”。使用尽可能小的数组来解决这个问题。

这是我目前所拥有的:

#include <stdio.h>
#define SIZE 20

int duplicate (int num[] );
int main ()
{
    int i, numbers[ SIZE ];
    printf( " Enter 20 numbers between 10 and 100:\n " );
    scanf_s( "%d\n" );

    for (int i = 0; i < SIZE  - 1; i++ ); 
    {


int duplicate( int num[] )
{
    int i, hold;

    for ( i = 0; i <= SIZE - 1; i++ )
        if ( num[i] == num[i=1] ){
            hold = num[i];
            else
                hold = num[i+1];
        }

    printf( "%3d\n," num[ i ] );
}

最佳答案

不幸的是,您的教授可能不够聪明,无法解决他自己的问题。这个问题的最小可能数组大小为 2(假设一个 64 位数据类型,这是标准规定的最大数据类型。对于 32 位整数,它需要三个元素,而对于 128 位整数,只需要 1 个)。

#include <stdint.h>
#include <stdio.h>
int main(void)
{
    int_fast64_t visited[2] = { 0 };
    int inputs_left = 20;
    do {
        int input, slot;
        int_fast64_t mask;
        puts("Enter an integer between 10 and 100: ");
        if (!scanf("%d", &input)) {
            puts("That's not a number!\n");
            continue;
        }
        if (input < 10 || input > 100) {
            puts("Out of range!\n");
            continue;
        }
        slot = (input - 10) >> 6;
        mask = 1 << ((input - 10) & 0x3F);
        if (visited[slot] & mask) {
             puts("Already seen, it is a duplicate.\n");
        }
        else {
            visited[slot] |= mask;
            printf("%d is new\n", input);
        }
        inputs_left--;
    } while (inputs_left);
    return 0;
}

如果您能够正确解释它的工作原理,欢迎您在作业中使用此代码(我希望您的教授教您如何编写注释)。

关于c++ - 在数组和循环方面需要帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6728451/

相关文章:

c++ - 如何在 Linux 运行时检查堆栈使用情况?

java - 使用三重 int 数组

javascript - 如何创建一个计数器循环,该循环在单击提交按钮时启动并输出多行单词,每个单词前面有一个数字?

jquery - 如何在 jquery 中将项目数组循环两个并放入另一个数组?

javascript - 基于嵌套值或提升值的深度排序多维数组

javascript - 通过循环和数组减少 If 语句

c++ - 内联方法时数组不会改变

c++ - 在模板中将 char 转换为 int 引用

c++ - 如何去除 GtkTreeView 排序箭头?

javascript - 为什么在 for 循环中使用 pop() 不起作用 (javascript)