编写程序,输入一个正整数n(1<n<=10),再输入n个整数,将最小值与第一个数交换,最大值与最后
编写程序,输入一个正整数n(1<n<=10),再输入n个整数,将最小值与第一个数交换,最大值与最后一个数交换,然后输出交换后的n个数...
编写程序,输入一个正整数n(1<n<=10),再输入n个整数,将最小值与第一个数交换,最大值与最后一个数交换,然后输出交换后的n个数
展开
10个回答
展开全部
#include <stdio.h>
void main()
{
int i,j=0,k=0,t,n,min,max,a[10];
printf("输入整数的个数: ");
scanf("%d",&n);
printf("输入%d个整数: ",n);
scanf("%d",&a[0]);
max=a[0];min=a[0];
for(i=1;i<n;i++)
{
scanf("%d",&a[i]);
if(max<a[i]) {max=a[i];j=i;}
if(min>a[i]) {min=a[i];k=i;}
}
t=a[k];a[k]=a[0];a[0]=t;
t=a[j];a[j]=a[n-1];a[n-1]=t;
printf("交换顺序后输出: ");
for(i=0;i<n;i++)
printf("%d ",a[i]);
}
运行示例:
展开全部
#include <stdio.h>
void main ()
{
int a[10];
int i,k=0,n,min,temp;
printf ("输入n:");
scanf ("%d",&n);
printf ("输入%d个数:\n",n);
for (i=0; i<n; i++)
scanf ("%d",&a[i]);
min = a[0];
for (i=0; i<n; i++)
if (min > a[i])
{
min = a[i];
k = i;
}
printf ("最小值是:%d\n下标是:%d\n",min,k);
printf ("将最小值与第一个数交换后:\n");
if (k != 0)
{
temp = a[0];
a[0] = a[k];
a[k] = temp;
}
for (i=0; i<n; i++)
printf ("%d ",a[i]);
printf ("\n");
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这题目应该找到最大值和最小值所在的坐标位置,然后,在交换时,要考虑最大值是第一个数的情况。
#include<stdio.h>
int main()
{
int a[10];
int i,max,min,n;
printf("请输入一个正整数n(1<n<10)\n");
scanf("%d",&n);
printf("请输入n个正整数\n");
for(i=0;i<n;i++)
scanf("%d",&a[i]);
printf("\n");
max=min=0;
for(i=0;i<n;i++)
{
if( a[i] > a[max] )
max=i;
if(a[i] < a[min] )
min=i ;
}
//交换 最小值
i=a[0];
a[0]=a[min];
a[min]=i;
if ( max==0 ) //判断最大值位置,当是0位时,这时,已变到 min位置
max=min;
//交换最大值
i=a[n-1];
a[n-1]=a[max];
a[max]=i;
for(i=0;i<n;i++)
printf("%d\n",a[i]);
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include <stdio.h>
int ex(int a[],int n)
{
int i,min,max,s1,s2,t;
min=a[0];
s1=0;
max=a[n-1];
s2=n-1;
for(i=0; i<n; i++)
{
if(a[i]<min)
{
s1=i;
min=a[i];
}
if(a[i]>max)
{
s2=i;
max=a[i];
}
}
if(s1!=0)
{
t=a[0];
a[0]=min;
a[s1]=t;
}
if(s2!=n-1)
{
t=a[n-1];
a[n-1]=max;
a[s2]=t;
}
return 0;
}
void main()
{
int i,a[10],n,x,t;
printf("请输入数据个数n(1<=n<=10):");
scanf("%d",&n);
printf("请输入这%d个数:",n);
for(i=0; i<n; i++)
scanf("%d",&a[i]);
ex(a,n);
for(i=0; i<n; i++)
printf("%d ",a[i]);
printf("\n");
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
最大值与最后一个交换,需要使用到max 和a[i],以及一个临时变量,代码中使用的是max a[0] a[i],这里貌似有点问题。最小值与第一个交换,貌似你也是用的这3个变量。
如果觉得使用的变量过多,可以不使用临时变量,用嵌入式程序员的思路,节约空间复杂度,只使用max 和 a[i]两个变量就地进行值的交换
在两个 if 语句内改成
max = max + a[i];
a[i] = max - a[i];
max = max - a[i];
如果担心两数和超出范围可以用^异或操作
改成
max = max ^ a[i];
a[i] = a[i] ^ max;
max = max ^ a[i];
这样就不用担心两整数的和超出表示范围了。
下面的min的操作也与以上内容类似。
改成
min = min ^ a[0];
a[0] = a[0] ^ min
min = min ^ [a0]
如果觉得使用的变量过多,可以不使用临时变量,用嵌入式程序员的思路,节约空间复杂度,只使用max 和 a[i]两个变量就地进行值的交换
在两个 if 语句内改成
max = max + a[i];
a[i] = max - a[i];
max = max - a[i];
如果担心两数和超出范围可以用^异或操作
改成
max = max ^ a[i];
a[i] = a[i] ^ max;
max = max ^ a[i];
这样就不用担心两整数的和超出表示范围了。
下面的min的操作也与以上内容类似。
改成
min = min ^ a[0];
a[0] = a[0] ^ min
min = min ^ [a0]
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询