注册 登录
编程论坛 VC++/MFC

大一小白求教作业~

小小小小小黄 发布于 2012-12-11 16:55, 622 次点击
#include <iostream>
using namespace std;
int main()
{   
    int a[10],b[10];   
    int i,j,t,n;   
    for(i = 0; i < 10;i++)
        a[i] = b[i] = i + 1;   
    cout << "交换前:\n";   
    for(i = 0; i < 10; ++i)
        cout << a[i] << " ";   
    cout << endl;   
    for(i = 0; i < 9; ++i)
    {        for(j = i + 1; j < 10; ++j)
    {            if((a[i] % 2 == 1) && (a[j] % 2 == 0))
    {                t = a[i];               
    a[i] = a[j];               
    a[j] = t;               
    break;            
}        
}   
}   
    cout << "交换后:\n";   
    for(i = 0; i < 10; ++i)
        cout << a[i] << " ";   
    cout << endl;   
}

作业要求是 写一段代码,使一个十个元素的数组将偶数放到前面,奇数放在后面的位置。
上面这段代码是求度娘的,各种不理解啊,
1.using namespace std;  ——什么意思?
2.这个貌似是自动排序1~10的数组,但是十个随机数的数组整理如何编程,
而且题目里也要求调换的次数尽量的少。
求教~
10 回复
#2
crystall2012-12-11 17:07
程序代码:
#include <time.h>
#include <iostream>
using namespace std;

//using namespace std; //命名空间

//#include <iostream>
//#include <iostream.h> 这是两个文件

int main()
{   
    int nNum = 0;
    srand( (unsigned)time( NULL ) );

    printf("请输入一个值: ");
    scanf("%d", &nNum);

    for(int i = 0; i < nNum;i++ )
    {
        //rand()%10 得到的随机数:10以内
        
//得到的随机数有重复的,自己赛选一下
        
//rand()%100 得到的随机数:100以内
        printf("%d\n", rand()%10 );
    }

    return 0;
}
#3
crystall2012-12-11 17:08
回复 楼主 小小小小小黄
代码贼犀利啊
#4
crystall2012-12-11 17:32
程序代码:
#define NUM 9

//筛选重复的随机数
int Test(int Ary[], int nIndex, int nNum)
{
    for(int j = 0; j <= nIndex; j++)
    {
        if(nNum == Ary[j])
        {
            return 1;
        }
    }

    return 0;
}

int main()
{   
    srand( (unsigned)time( NULL ) );

    int nRandAry1[NUM] = {0};
    int i = 0;
    int j = 0;
    int nTemp = 0;

    printf("交换前: ");

    for(i = 0; i < NUM;)
    {
        //得到的随机数
        nTemp = rand()%10;

        //筛选重复的随机数
        
//如果重复,重新获取
        
//如果不重复,则保存到数组中
        if(Test(nRandAry1, i, nTemp) == 0)
        {
            nRandAry1[i] = nTemp;

            printf("%2d",  nRandAry1[i]);

            i++;
        }
    }

    for(i = 0; i < NUM; i++)
    {
        for(j = i + 1; j < NUM; j++)
        {
            //Ary[0] => Ary[1]
            
//如果第一个元素为奇数,第二个元素为偶数, 则交换
            if( (nRandAry1[i] % 2 == 1) && (nRandAry1[j] % 2 == 0))
            {
                nTemp = nRandAry1[i];
                nRandAry1[i] = nRandAry1[j];
                nRandAry1[j] = nTemp;
                break;
            }
        }
    }

    printf("\r\n交换后: ",  nRandAry1[i]);

    for(i = 0; i < NUM; i++)
    {
        printf("%2d",  nRandAry1[i]);
    }

    printf("\r\n");

    return 0;
}
#5
mmmmmmmmmmmm2012-12-12 11:56
学习一下
#6
小小小小小黄2012-12-12 14:08


马上要期末考试了,
拿什么拯救你 我的C++,
闷。
#7
mmmmmmmmmmmm2012-12-12 14:40
考试考的简单 抓紧复习一下 来得及的
#8
_leo2012-12-12 16:05
using namespace std;  ——什么意思?
使用std命名空间。里面有很多你可以使用的库函数。
另外,代码的确很犀利!
#9
qunxingw2012-12-12 16:51
如果要满足题意,尽可能交换次数最少,感觉应该先做一个判断找出偶数的个数,然后界点下标,再做有效交换。
#10
qunxingw2012-12-12 17:08
或者,i从前向后扫,找奇数,同时j从后向前扫找偶数,交换,循环条件i小于j时
#11
小小小小小黄2012-12-14 09:31
回复 10楼 qunxingw
现在在上C++课,老师刚刚讲完做法,
和10楼的方法一样诶~,屌~

1