文章

8

粉丝

140

获赞

20

访问

26.6k

头像
数组实现,使用一个自定义函数挑出每次出去的人
P1018 贵州大学机试题
发布于2023年3月8日 22:00
阅读数 3.2k

在这道题里,一开始犯了好几个基本的语法错误,代码逻辑上应该是没有问题,所以现在总结一下,也希望能帮到看到的朋友们。

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);//赋值需要一个左值运算数 ,所以自定义函数还是要写在右边,来赋给左边...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发