请问fun(int *x,int n) 函数是怎么实现数组的倒置的?不理解这段代码,或者请讲讲实现这的思路,非常感谢

请问fun(int *x,int n) 函数是怎么实现数组的倒置的?不理解这段代码,或者请讲讲实现这的思路,非常感谢,第1张

思路其实挺简单的。传递的参数是一个数组的地址(指针),和一个数组的长度;

先声明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时,会把原来交换过的数再次交换,结果就还原了。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/13492575.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2025-09-01
下一篇2025-09-01

发表评论

登录后才能评论

评论列表(0条)

    保存