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
#include
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;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
#include
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;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;}