最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

假设有n盏灯(n为不大于5000的正整数),从1到n按顺序依次编号,初始时全

IT圈 admin 30浏览 0评论

2024年4月3日发(作者:纵从)

本篇文章用动态数组去储存灯的信息,基于C99的编译器也可以用一般数组就好了。

> 假设有 N 盏灯(N 为不大于 5000 的正整数),从 1到 N 按顺序依次编号,初始时全部处于开

启状态;有 M 个人(M 为不大于 N 的正整数)也从 1 到 M 依次编号。第一个人(1 号)将灯全

部关闭,第二个人(2 号)将编号为 2 的倍数的灯打开,第三个人(3 号)将编号为 3 的倍数的灯

做相反处理(即,将打开的灯关闭,将关闭的灯打开)。依照编号递增顺序,以后的人都和 3 号一

样,将凡是自己编号倍数的灯做相反处理。

> 请问:当第 M个人操作之后,哪几盏灯是关闭的,按从小到大输出其编号,其间用逗号间隔。

输入格式

输入正整数 N 和 M,以单个空格隔开,M≤N。

输出格式

顺次输出关闭的灯的编号,其间用逗号间隔。

样例输入

10 10

样例输出

1,4,9

//

#include

#includeconst int BLOCK_SIZE = 5;

typedef struct{

int *array;

int size;}Array;

Array array_create(int init_size);void array_free(Array *a);

int array_size(Array *a);

int *array_at(Array*a,int index);void array_inflate(Array *a,int more_size);void

array_set(Array*a,int index,int value);

Array array_create(int init_size){

Array a;

= init_size;

= (int*)malloc(sizeof(int)*);

return a;}void array_free(Array *a){

free(a->array);

a->array=NULL;

a->size=0;}

int array_size(Array *a){

return a->size;}

int *array_at(Array*a,int index){

if(index>=a->size)

{

array_inflate(a,(index/BLOCK_SIZE+1)*BLOCK_SIZE - a->size);

}

return &(a->array[index]);}void array_inflate(Array *a,int more_size){

int *p=(int*)malloc(sizeof(int)*(a->size +(more_size)));

for(int i=0;isize;i++)

{

p[i]=a->array[i];

}

free(a->array);

a->array=p;

a->size+=more_size;}void array_set(Array*a,int index,int value){

a->array[index]=value;}

int main(){

Array a,b;

int num1,num2;

scanf("%d %d",&num1,&num2);

a = array_create(num1);

for(int i =0;i

{

*array_at(&a,i) = 0;

}

for(int i=0;i

{

for(int j=2;j<=num2;j++)

{

if((i+1)%j==0)

{

[i]++;

}

}

}

if([0]%2==0)

{

printf("1");

}

for(int i =1;i

{

if([i]%2==0)

{

printf(",%d",i+1);

}

}

array_free(&a);

return 0;}

2024年4月3日发(作者:纵从)

本篇文章用动态数组去储存灯的信息,基于C99的编译器也可以用一般数组就好了。

> 假设有 N 盏灯(N 为不大于 5000 的正整数),从 1到 N 按顺序依次编号,初始时全部处于开

启状态;有 M 个人(M 为不大于 N 的正整数)也从 1 到 M 依次编号。第一个人(1 号)将灯全

部关闭,第二个人(2 号)将编号为 2 的倍数的灯打开,第三个人(3 号)将编号为 3 的倍数的灯

做相反处理(即,将打开的灯关闭,将关闭的灯打开)。依照编号递增顺序,以后的人都和 3 号一

样,将凡是自己编号倍数的灯做相反处理。

> 请问:当第 M个人操作之后,哪几盏灯是关闭的,按从小到大输出其编号,其间用逗号间隔。

输入格式

输入正整数 N 和 M,以单个空格隔开,M≤N。

输出格式

顺次输出关闭的灯的编号,其间用逗号间隔。

样例输入

10 10

样例输出

1,4,9

//

#include

#includeconst int BLOCK_SIZE = 5;

typedef struct{

int *array;

int size;}Array;

Array array_create(int init_size);void array_free(Array *a);

int array_size(Array *a);

int *array_at(Array*a,int index);void array_inflate(Array *a,int more_size);void

array_set(Array*a,int index,int value);

Array array_create(int init_size){

Array a;

= init_size;

= (int*)malloc(sizeof(int)*);

return a;}void array_free(Array *a){

free(a->array);

a->array=NULL;

a->size=0;}

int array_size(Array *a){

return a->size;}

int *array_at(Array*a,int index){

if(index>=a->size)

{

array_inflate(a,(index/BLOCK_SIZE+1)*BLOCK_SIZE - a->size);

}

return &(a->array[index]);}void array_inflate(Array *a,int more_size){

int *p=(int*)malloc(sizeof(int)*(a->size +(more_size)));

for(int i=0;isize;i++)

{

p[i]=a->array[i];

}

free(a->array);

a->array=p;

a->size+=more_size;}void array_set(Array*a,int index,int value){

a->array[index]=value;}

int main(){

Array a,b;

int num1,num2;

scanf("%d %d",&num1,&num2);

a = array_create(num1);

for(int i =0;i

{

*array_at(&a,i) = 0;

}

for(int i=0;i

{

for(int j=2;j<=num2;j++)

{

if((i+1)%j==0)

{

[i]++;

}

}

}

if([0]%2==0)

{

printf("1");

}

for(int i =1;i

{

if([i]%2==0)

{

printf(",%d",i+1);

}

}

array_free(&a);

return 0;}

发布评论

评论列表 (0)

  1. 暂无评论