在做《算法竞赛入门经典》习题2-10 permutation时,遇到数组初始化赋值的问题。
结论:
数组只有在初始化,也就是 声明+赋值的时候可以采用大括号的方式,来初始化。其他时候都必须用循环一个个赋值。
具体例子如下,注释里有讲解。
// 排列 permutation
#include<stdio.h>
int main(){
int a,b,c;
int check[10]={0}; // 全是0,而 int check[10] = {1} 结果只有第一个是1,其他都是0.
int sign;
for(a=123;a<=321;a++){
sign = 1;
b=2*a; c=3*a;
check[a/100]=check[a%100/10]=check[a%100%10]=1;
check[b/100]=check[b%100/10]=check[b%100%10]=1;
check[c/100]=check[c%100/10]=check[c%100%10]=1;
for(int i=1;i<10;i++){
if(check[i]==0){
sign = 0;
break;
}
}
if(sign){
printf("%d %d %d\n", a,b,c);
}
/*
int a[5]={1,2,3}; 正确
但
int a[5];
a={1,2,3}错误
因为数组只能在初始化的时候一次性赋值,其他时候必须要一个一个赋值。
字符型 数组用 "..."初始化同理。
*/
for(int i=1;i<10;i++){
check[i]=0;
}
}
return 0;
}
C字符数组赋值的具体讲解如下链接
https://www.cnblogs.com/ranjiewen/articles/6833074.html