繁体   English   中英

请解释一下代码?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM