如何解决为什么这段代码不会因为 1 行代码而运行?
为什么此代码仅在我删除 Total = 0
循环中的 while(Total != N)
时才会运行,而如果我不删除它就不会运行?
但问题是我需要使用 total = 0
才能完成某个测试用例。
#include <stdio.h>
int N;
void Shift(long long B[]){
int i;
long long temp;
temp = B[N - 1];
for(i = N - 1; i > 0; i--){
B[i] = B[i - 1];
}
B[0] = temp;
}
int main() {
int j,i,Jumlah = 0,Total = 0;
scanf("%d",&N);
long long A[N],B[N];
for(i = 0; i < N; i++) {
scanf(" %lld",&A[i]);
}
for(i = 0; i < N; i++) {
scanf(" %lld",&B[i]);
if(B[i] == A[i]) {
TotaL++;
}
}
while(Total != N) {
Shift(B);
Jumlah++;
//Total = 0;
for(i = 0; i < N; i++) {
if(A[i] == B[i]) {
TotaL++;
}
}
}
printf("%d\n",Jumlah);
return 0;
}
测试用例:N = 5 第一个数组 = 1 2 5 3 4 第二个数组 = 5 1 4 2 3
解决方法
在这段代码中
Total = 0;
for(i = 0; i < N; i++){
if(A[i] == B[i]){
Total++;
}
}
当且仅当条件 Total
对于 A[i] == B[i]
的所有值都为真时,变量 i
将达到值 N。
因此,当您将代码包装成 while
语句时,例如:
while (Total != N) {
Total = 0;
for(i = 0; i < N; i++){
if(A[i] == B[i]){
Total++;
}
}
}
如果 A[i] == B[i]
为 false 一次或多次,您将陷入无限循环。
移位操作(即 Shift(B);
)并不能确保您将在 B
中的所有元素等于 A
中的所有元素的情况下结束
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。