#include "stdio.h" #define N 10 #include "math.h" int passway ( int n, int n1, int* pn ); main() { int n,n1,pn1; int time; scanf("%d %d",&n,&n1); time=passway(n,n1,&pn1); if(time>0) printf("%d %d %d",pn1,N-pn1,time); else printf("error!"); } int passway( int n, int n1, int* pn ) { int t1[10],t2[10]; int i,j; int n2=n-n1; int m1=n1,m2=n2*3; int m[10],min=n2; if(n<0||n1>n) return 0; else { for(i=1;i<10;i++) { if(n1%i==0) t1[i]=n1/i; else t1[i]=n1/i+1; for(j=10-i;;) { if(n2%j==0) t2[i]=(n2/j)*3; else t2[i]=(n2/j+1)*3; m[i]=(t1[i]>t2[i])?t1[i]:t2[i]; } if(m[i]<min){ min=m[i]; pn=i; } } return min; } } 改进上面代码中passway函数部分
时间: 2024-02-14 17:09:23 浏览: 84
#包括stdio.h int main() char s81,c; int i,number=0,word=
在这段代码中,passway函数的逻辑较为混乱,可以考虑进行如下的改进:
1. 将变量的命名更改为有意义的名称,方便理解和维护。
2. 将计算最小时间的逻辑提取出来,形成一个单独的函数,便于复用和维护。
3. 减少不必要的循环,提高代码效率。
改进后的代码如下:
```c
#include <stdio.h>
#include <math.h>
int get_min_time(int n1, int n2, int i, int* pn) {
int t1 = (n1 % i == 0) ? n1 / i : n1 / i + 1;
int j = 10 - i;
int t2 = (n2 % j == 0) ? n2 / j * 3 : (n2 / j + 1) * 3;
int m = (t1 > t2) ? t1 : t2;
if (m < *pn) {
*pn = i;
}
return m;
}
int passway(int n, int n1, int* pn) {
int n2 = n - n1;
if (n < 0 || n1 > n) {
return 0;
}
int min_time = n2 * 3;
for (int i = 1; i < 10; i++) {
int m = get_min_time(n1, n2, i, pn);
if (m < min_time) {
min_time = m;
}
}
return min_time;
}
int main() {
int n, n1, pn;
int time;
scanf("%d %d", &n, &n1);
time = passway(n, n1, &pn);
if (time > 0) {
printf("%d %d %d", pn, 10 - pn, time);
} else {
printf("error!");
}
return 0;
}
```
改进后的代码更易读、易懂,且运行效率更高。
阅读全文