A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© fjzxx123 中级黑马   /  2015-3-25 23:07  /  3184 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

5黑马币
有1个整型数组,请自己设计算法将这个数组中的元素进行翻转(
比如: 有数组 int arr[5] = {10,11,3,45,6};
将元素的值设置为翻转        {6,45,3,11,10}

实在写不出来啊,求大神解救

最佳答案

查看完整内容

其实只要找到数组的中间坐标,然后再进行数组一头,一尾相互交换就可以。 代码如下,请看: #include int main(void) { int arr[5] = {10,11,3,45,6}; int len = sizeof(arr)/sizeof(int); //计算出数组长度 int times = len/2; //计算出要翻转的次数 int i = 0; int temp = 0; for(i = 0; i < times; i++) { temp = arr; arr = arr[--len]; arr[len] = tem ...

12 个回复

倒序浏览
其实只要找到数组的中间坐标,然后再进行数组一头,一尾相互交换就可以。
代码如下,请看:
#include <stdio.h>
int main(void) {
    int arr[5] = {10,11,3,45,6};
    int len = sizeof(arr)/sizeof(int); //计算出数组长度
    int times = len/2;                 //计算出要翻转的次数
    int i = 0;
    int temp = 0;
    for(i = 0; i < times; i++)
    {
        temp = arr[i];
        arr[i] = arr[--len];
        arr[len] = temp;
    }
    for(i = 0; i < sizeof(arr)/sizeof(int); i++)
    {
        printf("%d ", arr[i]);
    }
    return 0;
}

点评

不客气,有空多交流。  发表于 2015-3-26 20:23
谢谢啦~  发表于 2015-3-26 19:37
回复 使用道具 举报

int main() {
    int arr[5] = {10,11,3,45,6};
   
    for (int i = 0; i <5/2 ; i++) {
       int temp =arr[4-i];
        arr[4-i] =arr[i];
        arr[i] = temp ;
    }
    for (int j = 0; j <5; j++) {
        printf("%d\t",arr[j]);
    }
    return 0;
}
值的交换
回复 使用道具 举报
#include<stdio.h>
int main(){

//定义个整形变量用来存放数组元素的个数
    int number;
    //提示输入,并保存数组元素的个数
    printf("你的数组有多少个元素: ");
    scanf("%d", &number);
   
    //定义一个数组,数组大小就是刚才输入的数字
    int array[number];
    //读取每个数组元素
    for(int i=0; i<number; i++)
        scanf("%d", &array[i]);
    //第一个和最后元素交换,这里采用直接交换(就是不借助中间变量)
    for(int i=0; i<number/2; i++)
    {
        array[i] = array[number-i-1] + array[i];
        array[number-i-1] = array[i] - array[number-i-1];
        array[i] = array[i] - array[number-i-1];
    }
    //输出调换顺序后的数组
    for(int i=0; i<number; i++)
        printf("%d  ", array[i]);
    return 0;
}
:lol
回复 使用道具 举报
RaymingChan 发表于 2015-3-25 23:07
其实只要找到数组的中间坐标,然后再进行数组一头,一尾相互交换就可以。
代码如下,请看:
#include

能给说说这句么,不懂为什么这样 sizeof(arr)/sizeof(int); //计算出数组长度
回复 使用道具 举报
RaymingChan 发表于 2015-3-25 23:07
其实只要找到数组的中间坐标,然后再进行数组一头,一尾相互交换就可以。
代码如下,请看:
#include

不过你不是定义了长度的变量了吗?后面循环的时候怎么又写了个计算长度的
回复 使用道具 举报
fjzxx123 发表于 2015-3-26 21:58
不过你不是定义了长度的变量了吗?后面循环的时候怎么又写了个计算长度的 ...

你是说int len = 0;这个变量吗?因为for循环中有len--,所以len的值已经改变了。。
回复 使用道具 举报
进击的华仔 发表于 2015-3-26 21:56
能给说说这句么,不懂为什么这样 sizeof(arr)/sizeof(int); //计算出数组长度

sizeof(arr)是计算数组的总字节数的,而sizeof(int)则计算一个int所占的字节数,所以用总数除以单个字节数就可以知道数组中有几个元素了。
如果楼主定义为 char arr[]={1,2,3,4,5,6};的话  长度也可以为:sizeof(arr)/sizeof(char);
回复 使用道具 举报
RaymingChan 发表于 2015-3-26 22:58
sizeof(arr)是计算数组的总字节数的,而sizeof(int)则计算一个int所占的字节数,所以用总数除以单个字节 ...

受教了,记到笔记里
回复 使用道具 举报
java 编写
     import java.util.Scanner;
public class ReverseOrder {
        private static Scanner sc;

        /**
         * @param args
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub
               
                //                创建数组并赋值
                int[] array=new int[5];
                for(int i=1;i<=array.length;i++){
                        System.out.print("请输入第"+i+"个元素并按Enter键进入下一步:");
                        sc = new Scanner(System.in);
                        array[i-1]=sc.nextInt();
                }
               
//                遍历
                 for(int i=0; i<array.length/2; i++)
                    {
                        array[i] = array[i]^array[array.length-i-1];
                        array[array.length-i-1] = array[i]^array[array.length-i-1];
                        array[i] = array[i]^array[array.length-i-1];
                    }
                System.out.println("遍历输出的结果为:");
                for(int i=0;i<array.length;i++){
                       
                        System.out.print(array[i]);
                        System.out.print("  ");
                }
               
        }

}
回复 使用道具 举报
巴啦啦,我是卖货财的小男饭呢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马