gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 00:40:11 24 4
gpt4 key购买 nike

用单下标数组解决如下问题:读入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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com