⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 c题目答案.txt

📁 C 入门程序编写 必备
💻 TXT
📖 第 1 页 / 共 3 页
字号:
    scanf("%d %d", &x, &y);
    dtob(x, xb, "X");
    dtob(y, yb, "Y");
    badd(xb, yb, resultb);
    printf("\nResult convert to be decimal is:%4d\n", btod(resultb));
}

void dtob(unsigned int n, int *nb, char *s)
{
    int i = N;
    while(n)
    {
        nb[–i] = n & 1;
        n >>= 1;
    }

    nb[–i] = -1;
    show(nb, s);
}

void badd(int *xb, int *yb, int *resultb)
{
    int i = 0;
    while(xb[i] != -1 && yb[i] != -1)
        i++;
    resultb[i++] = -1;
    for(; i < N; i++)
    {
        if(xb[i] == -1)
            resultb[i] = yb[i];
        else if(yb[i] == -1)
            resultb[i] = xb[i];
        else
            resultb[i] = xb[i] + yb[i];
    }

    for(i = N; resultb[i] != -1; i–)
    {
        if(resultb[i] > 1)
        {
            resultb[i] %= 2;
            if(resultb[i-1] == -1)
            {
                resultb[i-1] = 1;
                resultb[i-2] = -1;
            }
            else
                resultb[i-1] += 1;
        }
    }

    show(resultb, "Result");
}

unsigned int btod(int* nb)
{
    static unsigned int i, sum;
    for(; nb[i] != -1; i++);
    for(++i; i < N; i++)
        sum += nb[i]*(int)pow(2, N-1-i);
    return sum;
}

void show(int *nb, char *s)
{
    int i;
    printf("\n%s\t= ", s);
    for(i = 0; nb[i] != -1; i++);
    for(++i; i < N; i++)
        printf("%d", nb[i]);
} 

///////////////////////////////////////////////////////////////////////////////
//
//  9. 四人玩火柴棍游戏,每一次都是三个人赢,一个人输。输的人要按赢者手中的火柴
//  数进行赔偿,即赢者手中有多少根火柴棍,输者就赔偿多少根。现知道玩过四次后,
//  每人恰好输过一次, 而且每人手中都正好有16根火柴。问此四人做游戏前手中各有
//  多少根火柴? 编程解决此问题。
///////////////////////////////////////////////////////////////////////////////
#include "iostream.h"
#include "iomanip.h"
void main()
{
    int a[4] = {16, 16, 16, 16};
    int i, j;
    for(i = 0; i < 4; i++)
    {
        for(j = 0; j < 4; j++)
        {
            if(j != i)
            {
                a[j] /=2;
                a[i] += a[j];
            }
        }
    }

    cout<<"In the begining:"<<endl;
    for(i = 0; i < 4; i++)
    {
        cout<<(char)(65+i)<<" has "<<setw(3)<<a[i]<<
            " matches, and lost at round "<<4-i<<endl;
    }
}

//////////////////////////////////////////////////////////////////////////////
//
// 10. 如图1所示,编写程序计算               ┎┰┰┰┰┰┰┰┰┰┒
//    大大小小正方形共有多少?当最小          ┠╂╂╂╂╂╂╂╂╂┨
//    正方行边长为1时,它们的总面积          ┠╂╂╂╂╂╂╂╂╂┨
//    共为多少?                              ┠╂╂╂╂╂╂╂╂╂┨
//                                            ┠╂╂╂╂╂╂╂╂╂┨
//                                            ┠╂╂╂╂╂╂╂╂╂┨
//                                            ┠╂╂╂╂╂╂╂╂╂┨
//                                            ┠╂╂╂╂╂╂╂╂╂┨
//                                            ┠╂╂╂╂╂╂╂╂╂┨
//                                            ┠╂╂╂╂╂╂╂╂╂┨
//                                            ┖┸┸┸┸┸┸┸┸┸┚ 
//////////////////////////////////////////////////////////////////////////////
#include "stdio.h"
#define N  10

void main()
{
    static int a[N][N];
    int i, j, k, num, count = 0, area = 0;
    for(i = 0; i < N; i++)
    {
        for(j = 0, num = 0; j < N; j++)
        {
            a[i][j] = (num > N-i-1)?num :++num;
            printf("%4d", a[i][j]);
            count += a[i][j];
            for(k = 1; k <= a[i][j]; k++)
                area += k*k;
        }
        putchar('\n');
    }

    printf("count = %d, total area = %d\n", count, area);
}

//////////////////////////////////////////////////////////////////////////////
//
// 11. 巧排数字。将1、2、...、20这20个数排成一排,使得相邻的两个数之
//     和为一个素数,且首尾两数字之和也为一个素数。编程打印出所有的排法。
//////////////////////////////////////////////////////////////////////////////
#include "stdio.h"
#include "math.h"

static used[21], link[21];
bool isprime(int a)
{
    for(int i = 2; i <= sqrt(a); i++)
    {
        if(!(a%i))
            return false;
    }
    return true;
}

void trace(int node)
{
    int i;
    if((node == 21) && isprime(link[20] + link[1]))
    {
        for(i = 1; i < 21; i++)
            printf("%4d", link[i]);
        putchar(10);
    }
    for(i = 1; i <= 20; i++)
    {
        if(!used[i])
        {
            link[node] = i;
            used[i] = 1;
            if(isprime(link[node]+link[node-1]))
                trace(node+1);
            used[i] = 0;
        }
    }
}

void main()
{
    trace(1);
}

//////////////////////////////////////////////////////////////////////////////
//
// 13. 有N个硬币(N为偶数)正面朝上排成一排,每次将 N-1 个硬币翻过来放在原位
// 置, 不断地重复上述过程,直到最后全部硬币翻成反面朝上为止。编程让计算机把
// 翻币的最简过程及翻币次数打印出来(用*代表正面,O 代表反面)。
//////////////////////////////////////////////////////////////////////////////
#include "stdio.h"
#include "assert.h"
#include "string.h"
#define  N  10

void main()
{
    assert(!(N%2));
    bool s[N];
    int i, j;
    for(j = 0; j < N; j++)
    {
        s[j] = true;
        printf("%3c", '*');
    }
    printf("\n");        
    for(i = 0; i < N; i++)
    {
        for(j = 0; j < N; j++)
        {
            if(j != i)
                s[j] = !s[j];
            printf("%3c", s[j]?'*':'0');
        }
        printf("\n");
    }
}

//////////////////////////////////////////////////////////////////////////////
//
// 14. 有黑白棋子各有N个(分别用*和O代替),按下图方式排列
//
//        ***...***OOO...OOO
//
//            N个黑棋            N个白棋
//
// 允许将相邻两个棋子互换位置,最后使队形成黑白交替排列,试编程实现该操作。
//////////////////////////////////////////////////////////////////////////////
#include "stdio.h"
#define N  5
void main()
{
    char *str = new char[2*N], temp;
    int i, start, end;
    for(i = 0; i < N; i++)
        str[i] = '*';
    for(; i < 2*N; i++)
        str[i] = 'o';
    printf("%s\n", str);

    for(start = N-1, end = 2*N-2; start < end; start–,end-=2)
    {
        for(i = start; i < end; i++)
        {
            temp     = str[i];
            str[i]   = str[i+1];
            str[i+1] = temp;
            printf("%s\n",str);
        }
    }
    delete[] str;
}

//////////////////////////////////////////////////////////////////////////////
//
// 15. 已知6个城市,用c[i,j]表示从i城市到城市j是否有单向的直达汽车
//
// (1=<i〈=6,1〈=j〈=6), c[i,j]=1 表示城市i到城市j有单向直达汽
// 车; 否则 c[i,j]=0.  试编制程序,对于给出的城市代号i,打印出从该城市出
// 发乘车(包括转车)可以到达的所有城市。 
//////////////////////////////////////////////////////////////////////////////
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <assert.h>
#define  N  6

int visited[N] = {0};

void visit(int c[][N], int i)
{
    if(!visited[i])
    {
        visited[i] = 1;
        for(int j = 0; j < N; j++)
            if(c[i][j] && !visited[j])
                visit(c, j);
    }
}

void main( void )
{
    int  c[N][N], i, j, n;
    
    srand((unsigned)time(NULL));
    for (i = 0; i < N; i++ )
    {
        for(j = 0; j < N; j++)
        {
            c[i][j] = rand()%2;
            printf( "%6d", c[i][j]);
        }
        putchar('\n');
    }

    scanf("%d", &n);
    assert(n < N);
    visit(c, n);
    for (i = 0; i < N; i++ )
    {
        if(visited[i])
            printf( "%6d", i);
    }
}

//////////////////////////////////////////////////////////////////////////////
//
// 17. 编写一个程序,当输入不超过60个字符组成的英文文字时,计算机将这个句子
// 中的字母按英文字典字母顺序重新排列,排列后的单词的长度要与原始句子中的长度
// 相同。例如:
//
//    输入:
//
//    THE PRICE OFBREAD IS ¥1 25 PER POUND
//
//    输出:
//
//    ABC DDEEE EFHIINO OP ¥1 25 PPR RRSTU
//
// 并且要求只对A到Z的字母重新排列,其它字符保持原来的状态。
//////////////////////////////////////////////////////////////////////////////
#include "stdio.h"
#include "ctype.h"
#include "string.h"
#define  MAX  60

void main()
{
    char str[MAX+1]  = " THE PRICE OFBREAD IS $1 25 PER POUND", *p, *q, temp;     
    int len = strlen(str);
    for(p = str; p < str+len-1; p++)
    {
        for(q = p; q < str+len; q++)
        {
            if(!isalpha(*q))
                continue;
            if(*p > *q)
            {
                temp = *p;
                *p   = *q;
                *q   = temp;
            }
        }
    }
    printf("%s\n", str);
}

//////////////////////////////////////////////////////////////////////////////
//
// 18. 在一线性七个格位置的图上有两种不同颜色的棋子A,B. 排列如下图所示,中间
// 格的位置为空。
//          ┎─┰─┰─┰─┰─┰─┰─┒
//          ┃A┃A┃A┃  ┃B┃B┃B┃
//          ┖─┸─┸─┸─┸─┸─┸─┚
// 要求将A,B的现行位置交换,形成下图中的排列:
//          ┎─┰─┰─┰─┰─┰─┰─┒
//          ┃B┃B┃B┃  ┃A┃A┃A┃
//          ┖─┸─┸─┸─┸─┸─┸─┚
// 移动棋子的条件:
//   (1) 每个格中只准放一个棋子。
//   (2) 任意一个棋子均可移动一格放入空格内。
//   (3) 一方的棋子均可跳过另一方的一个棋子进入空格。
//   (4) 任何棋子不得跳跃两个或两个以上棋子(无论颜色同异)
//   (5) 任何一个颜色棋子只能向前跳,不准向后跳。
// 编程完成有关的移动,并且完成具有2N+1个格子的情形. 其中两种颜色各有
// N个棋子,且中间为空格.
//////////////////////////////////////////////////////////////////////////////

#include "stdio.h"
#define  N  7

void swapc(int a, int b, char *str)
{

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -