文章
8
粉丝
140
获赞
20
访问
26.6k
在这道题里,一开始犯了好几个基本的语法错误,代码逻辑上应该是没有问题,所以现在总结一下,也希望能帮到看到的朋友们。
1 、在c++中,将数组全都初始化为1的代码并非像初始化0一样,而是如果定义了a[105]={1},结果就是除了第一位为1,其余全为0,如果不加以重视,很可能就败在这个小细节上(比如我审视了半天都没发现TnT)一下提出几个解决方案:
(1)可以将数组定义全为0,然后设置flag为1时为标志,这样就不用在定义数组初始值为1上纠结;
(2)利用fill函数,将数组全部填充,fill(start,end,value);
(3)利用memset函数:memset(a,value,sizeof(a));
(4)笨办法:for循环,往往越简单越有效;
2、在devc++里,在for循环内部定义的(例如int i),其中的变量只能在for循环内部使用,如果想要其输出出来或者在for循环外继续使用就会报错,解决办法:
(1)在for以外定义这个变量,例如b,那么之后即便在外面return这个b,或者继续拿b做文章就可以不报错使用;
3、(小白错法)在devc++中,自定义函数,必须要写在main函数之前,或者在main函数之前引用定义它,否则也会出现报错;
4、如果是自定义函数,是返回输出型,那么就要在其左边先定义一个变量,去存储它,即他是右值运算符,需要一个左值运算数,去接收它,否则也会报错。
以上都是基于本题得到的一些语法细节。
#include<bits/stdc++.h>
using namespace std;
int by(int i,int a[],int n);
int main(){
int n,a[100]; //定义数组时最好别用a[100]={1},即第一个 元素为1,其余后面全为0;
cin>>n;
memset(a,1,sizeof(a));//也可以用fill(start,end,value)
int c=1;
for(int i=1;i<=n-1;i++){//一共出去n-1个人;
c=by(c,a,n);//赋值需要一个左值运算数 ,所以自定义函数还是要写在右边,来赋给左边...
登录后发布评论
暂无评论,来抢沙发