
思路其实挺简单的。传递的参数是一个数组的地址(指针),和一个数组的长度;
先声明2个指针i和j 分别指向数组的头和尾:
int p,m=n/2,i,j;
i=x;
j=x+n-1;
然后设置交换的终点,也是是数组的中部,用指针p来控制:
p=x+m;
然后从数组的首位置开始,一次交换一个元素,然后让i和j分别靠近p移动,直到把需要交换的元素都交换,也就完成了数组的转置!
for(;i<p;i++,j--)
{
int t=i;
i=j;
j=t;
}
void reverse(int p[], int n)
{
int q,t;
for(q=p+n-1;p<q;++p,--q)
{
t=p;
p=q;
q=t;
}
}
输入三个整数,按照由小到大的顺序输出这三个数。#
include <stdioh>
void swap(_____1_int pa,int pb____) 交换两个数的位置
{ int temp;
temp=pa;pa=pb;pb=temp;
}
Void main()
{ int a,b,c,temp;
scanf(“%d%d%d”,&a,&b,&c);
if(___2_a>b_) swap(&a,&b);
if(b>c) swap(___3_&b,&c_)
if(__4__a>b__) swap(&a,&b);
printf(“%d%d%d”,a,b,c);
}
20、输入m、n(要求输入数均大于0),输出它们的最大公约数。
#include <stdioh>
void main()
{ ____1_int m,n,k___;
while(1) {
scanf("%d%d",&m,&n);
if(m>0 && n>0) ___2_break __;
}
___3_k=n__;
while( m%k!=0 __4&&__ n%k!=0) k--;
printf("%d\n",k);
}
水平有限,写得不好,凑合看吧。
#include <stdioh>
int t,j;
void main()
{
int change(int x,int y);
int a[5]={1,2,3,4,5};
int i;
for(i=0;i<3;i++)
{
change(a[i],a[4-i]);
a[i]=j; a[4-i]=t;
}
for(i=0;i<5;i++)
printf("%d",a[i]);
}
int chage(int x)
{
t=x;
j=y;
return j;
return t;
}
//性能最高的方法,不调用任何函数
function reverseNo($number) {
$res = "";
for ($i = 0;; $i ++) {
if ($number < 10) {
return $res $number;
}
$n = $number % 10;
$res = $n;
$number = (int) ($number / 10);
}
}
$number = 41235345;
$res = reverseNo($number);
var_dump($res);
把erverse函数中for循环的循环条件i<n改成i<n/2就好了。
如果不改的话,在i<n/2时,确实是在前后交换,并且已经完成了所有的交换;当i>=n/2时,会把原来交换过的数再次交换,结果就还原了。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)