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;
}
请解释在第一个&#34; for&#34;中使用2个惊叹号。言。
答案 0 :(得分:0)
我将首先解释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
第4步:检查条件:i<=N
表示是1&lt; = N?如果是,则继续此循环,直到条件变为假。在作为A[i++] = i
的过程中,首先设置A的索引i然后i增加1,然后将A [i]的值设置为i。所以最后你得到以下数组:
A[1] = 2;
A[2] = 3;
A[3] = 4;
答案 1 :(得分:0)
第3步:假设您的输入为3 5 [N=3, K=5]
。因此printf("%d\n",(final=N*N)-N)
的输出将为(final = (3*3)-3) = 6(output) ,final =6
。