我用C语言写了一个正确的程序,请问还可以优化吗·?
答案:3 悬赏:80 手机版
解决时间 2021-04-14 23:20
- 提问者网友:城市野鹿
- 2021-04-14 02:36
我用C语言写了一个正确的程序,请问还可以优化吗·?
最佳答案
- 五星知识达人网友:長槍戰八方
- 2021-04-14 03:12
你的程序本身不正确啊
比如4个整数 :10 0 9 2 结果就不对啊
又比如5个数 :10 3 9 6 4 结果也不对啊
我来个另类的解法
#include
int main(void)
{
int a[102],i,n,skipg=1,skipl=1;
printf("Input n:\n");
scanf("%d",&n);
printf("输入n个整数:\n");
scanf("%d",&a[1]);
a[0]=a[n+1]=a[1];
for(i=2;i<=n;i++)
{
scanf("%d",&a[i]);
if(a[0]>a[i]) {a[0]=a[i]; skipl=i;}
if(a[n+1] }
if(skipg==skipl) n--;
for(i=0;i {
if(i!=skipg&&i!=skipl)
printf("%d ",a[i]);
}
return 0;
}追问对吧 我检测过的追答Input n:
5
输入n个整数:
10 3 9 6 4
3 4 9 6 10Press any key to continue
正确的结果是3 9 6 4 10吧追问正确结果就是3 4 9 6 10
这样得来的 先把第一位和最小调换位置得:3 10 9 6 4 再把最大和最后一位调换数字得:
3 4 9 6 10追答哦,这属于概念分歧
我认为的最小的排第一位并不是和第一位交换,同样最大的排最后一位也不是和最后一位交换
就和实际当中的排队:让队列中某人拍到最后,并不是让他和最后一个交换
比如4个整数 :10 0 9 2 结果就不对啊
又比如5个数 :10 3 9 6 4 结果也不对啊
我来个另类的解法
#include
int main(void)
{
int a[102],i,n,skipg=1,skipl=1;
printf("Input n:\n");
scanf("%d",&n);
printf("输入n个整数:\n");
scanf("%d",&a[1]);
a[0]=a[n+1]=a[1];
for(i=2;i<=n;i++)
{
scanf("%d",&a[i]);
if(a[0]>a[i]) {a[0]=a[i]; skipl=i;}
if(a[n+1] }
if(skipg==skipl) n--;
for(i=0;i
if(i!=skipg&&i!=skipl)
printf("%d ",a[i]);
}
return 0;
}追问对吧 我检测过的追答Input n:
5
输入n个整数:
10 3 9 6 4
3 4 9 6 10Press any key to continue
正确的结果是3 9 6 4 10吧追问正确结果就是3 4 9 6 10
这样得来的 先把第一位和最小调换位置得:3 10 9 6 4 再把最大和最后一位调换数字得:
3 4 9 6 10追答哦,这属于概念分歧
我认为的最小的排第一位并不是和第一位交换,同样最大的排最后一位也不是和最后一位交换
就和实际当中的排队:让队列中某人拍到最后,并不是让他和最后一个交换
全部回答
- 1楼网友:荒野風
- 2021-04-14 04:09
比如交换不容第三个变量,还有比较是判断下是否已完成,后面就不容重复比较了追问详细点 (比如交换不容第三个变)什么意思啊
- 2楼网友:我住北渡口
- 2021-04-14 03:23
#include
#include
#include
int main(int argc, char **argv)
{
int *nums = NULL;
int i = 0, n = 0, min = 0, max = 0, minindex = 0, maxindex = 0;
printf("Input n:");
scanf("%d", &n);
nums = (int*)calloc(n, sizeof(int));
for(i = 0; i < n; i++)
{
scanf("%d", &nums[i]);
if(i == 0)
{
min = nums[i];
max = nums[i];
}
else
{
if(nums[i] > max)
{
maxindex = i;
max = nums[i];
}
else if(nums[i] < min)
{
minindex = i;
min = nums[i];
}
}
}
if(minindex != 0)
{
memmove(nums + 1, nums, (minindex + 1) * sizeof(int));
nums[0] = min;
}
if(maxindex < (n - 1))
{
memmove(nums + maxindex, &nums[maxindex + 1], sizeof(int) * (n - maxindex));
nums[n - 1] = max;
}
printf("\n");
for(i = 0; i < n; i++)
printf("%d\n", nums[i]);
return 0;
}追问写得比我还长 算是优化吗·?追答看你所说的优化是指性能还是代码量了,要是想精简代码量的话肯定不能这么写了
#include
#include
int main(int argc, char **argv)
{
int *nums = NULL;
int i = 0, n = 0, min = 0, max = 0, minindex = 0, maxindex = 0;
printf("Input n:");
scanf("%d", &n);
nums = (int*)calloc(n, sizeof(int));
for(i = 0; i < n; i++)
{
scanf("%d", &nums[i]);
if(i == 0)
{
min = nums[i];
max = nums[i];
}
else
{
if(nums[i] > max)
{
maxindex = i;
max = nums[i];
}
else if(nums[i] < min)
{
minindex = i;
min = nums[i];
}
}
}
if(minindex != 0)
{
memmove(nums + 1, nums, (minindex + 1) * sizeof(int));
nums[0] = min;
}
if(maxindex < (n - 1))
{
memmove(nums + maxindex, &nums[maxindex + 1], sizeof(int) * (n - maxindex));
nums[n - 1] = max;
}
printf("\n");
for(i = 0; i < n; i++)
printf("%d\n", nums[i]);
return 0;
}追问写得比我还长 算是优化吗·?追答看你所说的优化是指性能还是代码量了,要是想精简代码量的话肯定不能这么写了
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯