[英]Please explain the code?
int main()
{
int N, K, i, j, k, x, final, cur, A[22];
for(i=!!scanf("%d %d",&N,&K), printf("%d\n",(final=N*N)-N);i<=N;A[i++]=i);
for(i=(cur=N)-1; i>=1; i--)
for(j=1; j<=i; printf("%d %d min\n%d %d max\n",A[j],A[j+1],A[j],A[j+1]),A[j]=++cur, A[j+1]=++cur, j++);
for(printf("%d",final-1+(cur=final)*0+(x=2)*0); cur>N; printf(" %d",cur), cur-=x, x+=2);
return 0;
}
请解释第一个“for”语句中 2 个感叹号的使用。
我将首先解释 for 循环,最后 3 个 for 循环很容易理解。 一步一步的解释。
第1步:
for(i=!!scanf("%d %d",&N,&K), printf("%d\n",(final=N*N)-N);i<=N;A[i++]=i);
这里, scanf("%d %d",&N,&K)
返回 2(成功读取的整数数。)
第 2 步:单否定, !2 = 0
,现在否定这个 0, !0 = 1
。 所以, i = !!2 = 1
第 3 步:假设您的输入是3 5
[N=3, K=5]。 所以printf("%d\\n",(final=N*N)-N)
将是final = (3*3)-3 = 6
Step 4:检查条件: i<=N
表示,是 1<=N? 如果是,则此循环将继续,直到条件变为假。 在A[i++] = i
,先设置 A 的索引 i,然后 i 增加 1,然后将 A[i] 的值设置为 i。 所以最后你得到以下数组:
A[1] = 2;
A[2] = 3;
A[3] = 4;
第 3 步:假设您的输入是3 5 [N=3, K=5]
。 所以printf("%d\\n",(final=N*N)-N)
将是(final = (3*3)-3) = 6(output) ,final =6
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.