简单的利用数组解决的有趣的小题目
数组的应用范围很广泛,是一种很方便使用的数据结构,但是同时,数组也有他的弊端,如两个数组不能够进行赋值操作,只能一个个元素的复制,且数组在声明时必须有确定的大小,在程序运行中不能再增加大小,但我们可以使用new来动态创建数组,也可以直接使用一些函数对数组进行操作,如复制函数memcpy(b,a,sizeof(type)*k)即将k个<span style="font-family: Arial, Helvetica, sans-serif;">type类型的元素从a复制给b,和memset(a,x,sizeof(a)),将数组a的值置为x,这都是常用的函数,这些函数包含在<string.h>头文件中。特别值得注意的是,当形参是引用时,数组不能转换为指针,而是传递数组的引用本身。</span>
/*
有n盏灯,编号为1~n。第1个人把所有灯打开,第2个人按下所有编号为2的倍数的开关(关闭),第3个人
按下所有编号为3的倍数的开关(关掉的灯将被打开,开着的灯将被关闭),依次类推,一共有k个人,
问最后有哪些灯开着?输入n,k
*/
#include<iostream>
using namespace std;
int main()
{
int n,k;
int *s;
cout<<"input n: "<<endl;
cin>>n;
s=new int[n+1];
//初始化数组或是memset(s,0,sizeof(s));
for(int h=0;h<n+1;h++)
s[h]=0;
cout<<"input k: "<<endl;
cin>>k;
//进行操作
for(int j=1;j<=k;j++)
for(int i=1;i<n+1;i++)
// if(i%j==0 && s[i]==0)s[i]=1;
// else if(i%j==0 && s[i]==1)s[i]=0;
//两句合为一句
if(i%j==0)s[i]=!s[i];
cout<<"show the array: "<<endl;
//for(int t=1;t<n+1;t++)
// cout<<s[t]<<'\t';
for(int t=1;t<n+1;t++)
if(s[t]==1)cout<<t<<endl;
cout<<endl;delete []s;return 0;}