| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1944 人关注过本帖, 1 人收藏
标题:2道面试题----关于if判断语句的和一个编程题
只看楼主 加入收藏
冰烨
Rank: 1
来 自:不咔界
等 级:新手上路
威 望:1
帖 子:135
专家分:0
注 册:2007-10-30
收藏
得分:0 
顶上,基础。
尤其是float型的if和switch经常考的东西

要么死去,要么奋斗!
2008-10-15 09:34
missiyou
Rank: 5Rank: 5
等 级:贵宾
威 望:16
帖 子:531
专家分:218
注 册:2007-10-9
收藏
得分:0 
我想解第二题。
可以分为二部分,第一部分,只有一个红球。
第二部分,是白球与黑球相加,11个,在这个11个当中找出7个球与红球相加可以算是一个组合,
算法,
在11当中,找7个,应该把11个当成一个循环队列,然后模7也就%7。如果m%7==0就是一组解。
呵呵
2008-10-15 10:20
JohnPlus
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2008-10-17
收藏
得分:0 
#include <stdio.h>
#include <conio.h>

typedef struct
{
    int num;
    int color;
}Ball;

typedef struct
{
    Ball ball;
    int flag;
}List;
 
static void move_1_to_start(List *list, int pos);
static void check_balls(const List *list, int length);
void combine( Ball ball[], int n, int m);

int main()
{
    Ball ball[] = {
        {1, 1},{2, 1},{3, 1},
        {4, 2},{5, 2},{6, 2},{7, 2},{8, 2},
        {9, 3},{10, 3},{11, 3},{12, 3},{13, 3},{14, 3}};
        
    combine(ball, 14, 8);

    getchar();
    return 0;
}

void combine(Ball ball[], int n, int m)
{
    List list[n];
    int i;
    register int j, found;
        
    for(i=0;i<n;i++)
    {
        list[i].ball = ball[i];
        list[i].flag = (i<m ? 1 : 0);
    }
    
    while(1)
    {
        found = 0;
        check_balls(list, n);
        
        for(j=0;j<n-1;j++)
        {
            if(list[j].flag == 1 && list[j+1].flag == 0 && !found)
            {
                list[j].flag = 0;
                list[j+1].flag = 1;
                move_1_to_start(list, j-1);
                found = 1;
            }
        }
                    
        if(!found)
        {
            break;
        }
    }
}

static void check_balls(const List *list, int length)
{
    register int i, exist = 0;

    for(i=0;i<length;i++)
    {
        if(list[i].flag == 1 && list[i].ball.color == 1)
            exist = 1;
    }
    
    if(exist)
    {
        for(i=0;i<length;i++)
        {
            if(list[i].flag == 1)
                printf("%d ", list[i].ball.num);
        }
        puts("");
    }
}

static void move_1_to_start(List *list, int pos)
{
    register int p = 0, q = pos;
    
    while(p < q)
    {
        while(p<q && list[p].flag == 1)
            p++;
        while(p<q && list[q].flag == 0)
            q--;

        if(list[p].flag== 0 && list[q].flag == 1)
        {
            list[p++].flag = 1;
            list[q--].flag = 0;    
        }
    }    
}


Dev-cpp OK
2008-10-17 16:59
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
取八个球里面恰有一个球为红色:
程序代码:
#include <stdio.h>
#include <stdlib.h>

int ball[14] = {0}, n = 14, k = 8;

void dfs(int d, int c)
{
    int i;
    if (c == k)
    {
        for (i = 0; i < n; i++)
            if (ball[i]) printf("%d ", i + 1);
        putchar('\n');
        return;
    }
    for (i = d; i < n; i++)
    {
        if (!ball[i])
        {
            ball[i] = 1;
            dfs(i + 1, c + 1);
            ball[i] = 0;
        }
    }
}

int main(void)
{
    int i;
    for (i = 0; i < 3; i++)
    {
        ball[i] = 1;
        dfs(3, 1);
        ball[i] = 0;
    }
    return 0;
}



取八个球里面必有一个球为红色:
程序代码:
#include <stdio.h>
#include <stdlib.h>

int ball[14] = {0}, n = 14, k = 8;

void dfs(int d, int c)
{
    int i, ilen;
    if (c == k)
    {
        for (i = 0; i < n; i++)
            if (ball[i]) printf("%d ", i + 1);
        putchar('\n');
        return;
    }
    ilen = c < 3 ? 3 : n;
    for (i = d; i < ilen; i++)
    {
        if (!ball[i])
        {
            ball[i] = 1;
            dfs(i + 1, c + 1);
            ball[i] = 0;
        }
    }
}

int main(void)
{
    dfs(0, 0);
    return 0;
}



加起来也没有LS的长………………

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-10-17 17:25
快速回复:2道面试题----关于if判断语句的和一个编程题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.063606 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved