回 帖 发 新 帖 刷新版面

主题:入门必做的题

1.  给定等式  A B C D E     其中每个字母代表一个数字,且不同数字对应不
                    D F G     同字母。编程求出这些数字并且打出这个数字的
             +      D F G     算术计算竖式。

             ───────

                X Y Z D E



  2. A、B、C、D、E五名学生有可能参加计算机竞赛,根据下列条件判断哪些
  人参加了竞赛:

   (1)A参加时,B也参加;

   (2)B和C只有一个人参加;

   (3)C和D或者都参加,或者都不参加;

   (4)D和E中至少有一个人参加;

   (5)如果E参加,那么A和D也都参加。



  3. 打印一个 N*N 的方阵,N为每边           N=15  打印出下面图形
 字符的个数(3<N<20), 要求最               TTTTTTTTTTTTTTT
 外一层为"T", 第二层为"J", 从第三层               TJJJJJJJJJJJJJT
 起每层依次打印数字 1,2,3,...                     TJ11111111111JT
 (右图以N为15为例)                           TJ12222222221JT
                                                  TJ12333333321JT
                                                  TJ12344444321JT
                                                  TJ12345554321JT
                                                  TJ12345654321JT
                                                  TJ12345554321JT
                                                  TJ12344444321JT
                                                  TJ12333333321JT
                                                  TJ12222222221JT
                                                  TJ11111111111JT
                                                  TJJJJJJJJJJJJJT
                                                  TTTTTTTTTTTTTTT



  4. 在N行N列的数阵中, 数K(1〈=K〈=N)在每行和每列中出现且仅
  出现一次,这样的数阵叫N阶拉丁方阵。例如下图就是一个五阶拉丁方阵。
  编一程序,从键盘输入N值后,打印出所有不同的N阶拉丁方阵,并统计个数。

        1  2  3  4  5
        2  3  4  5  1
        3  4  5  1  2
        4  5  1  2  3
        5  1  2  3  4


  5. 输入一个十进数,将其转换成 N 进制数(0<N<=16)。

回复列表 (共635个回复)

201 楼

//////////////////////////////////////////////////////////////////////////////
//
//  8. 输入两个正整数X,Y,将X,Y化为二进制数,然后将这两个二进制数作二进
//   制加法运算,再将结果化为十进制数输出。
//////////////////////////////////////////////////////////////////////////////
/*
#include "stdio.h"
#include "math.h"
#define N 18

void dtob(unsigned int, int*, char*);
unsigned int  btod(int*);
void badd(int*, int*, int*);
void show(int*, char*);

void main()
{
    unsigned int x, y;
    static int xb[N], yb[N], resultb[N], i;
    printf("input the decimal value X and Y:");
    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]);
}
*/

202 楼

刚学,一个都不会;不过我会努力的。

203 楼

//////////////////////////////////////////////////////////////////////////////
//
// 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]  = " 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);
}

204 楼

虽然我还没学完C语言!但看了你的帖我对C越来越感兴趣了!
呵呵!谢谢啊
[em3]

205 楼

//////////////////////////////////////////////////////////////////////////////
//
// 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);
}/*
结果:
   1   2   3   4   5   6   7   8   9  10
   1   2   3   4   5   6   7   8   9   9
   1   2   3   4   5   6   7   8   8   8
   1   2   3   4   5   6   7   7   7   7
   1   2   3   4   5   6   6   6   6   6
   1   2   3   4   5   5   5   5   5   5
   1   2   3   4   4   4   4   4   4   4
   1   2   3   3   3   3   3   3   3   3
   1   2   2   2   2   2   2   2   2   2
   1   1   1   1   1   1   1   1   1   1

count= 385,total area= 5368

以元素a[0][9]为例, 以该小正方形为右上角的正方形个数为10,这些正方形的面积之和为
1^2 + 2^2 + 3^2 +.......+10^2

206 楼

    ┌─┬─┬─┬─┬─┐
    │ 1│ 3│ 4│10│11│   
    ├─┼─┼─┼─┼─┤   
    │ 2│ 5│ 9│12│19│   
    ├─┼─┼─┼─┼─┤   
    │ 6│ 8│13│18│20│   
    ├─┼─┼─┼─┼─┤   
    │ 7│14│17│21│24│   
    ├─┼─┼─┼─┼─┤   
    │15│16│22│23│25│   
    └─┴─┴─┴─┴─┘   
蛇形填数:
#include <iostream>
using namespace std;
main()
{
    int number=1;
    int xunhuan=1;
    int i=0,j=0;
    int arr[100][100];
    int N;
    int n;
    int extra=0;
    int tmp;

    cin>>N;
    n=N*2;
    while(xunhuan<n)
    {
        if(xunhuan>N)
        {
            extra++;
        }
        tmp=xunhuan-extra*2;
        while(i<tmp)
        {
            j=xunhuan-1-extra-i;
            if(xunhuan&1)
                arr[i+extra][j]=number++;
            else
                arr[j][i+extra]=number++;
            i++;
        }
        xunhuan++;
        i=0;
    }
    for(i=0;i<N;i++)
    {
        for(j=0;j<N;j++)
            printf("%5d",arr[i][j]);
        cout<<endl;
    }
    
}

207 楼

//////////////////////////////////////////////////////////////////////////////
//
// 41. (合并链表) 已知两个链表 AN={a1,a2,...an}, BN={b1,b2,...bm}, 将其合并
// 为一个链表 CN={a1,b1,a2,b2,...}
//////////////////////////////////////////////////////////////////////////////

#include "stdio.h"
#include "malloc.h"
struct node
{
    int data;
    node* next;
};

node* create(char ch)
{
    node *p, *q, *head =NULL;
    int i,n;
    printf("\ninput the size of link %c:", ch);
    scanf("%d", &n);
    printf("\ninput the data's value of each element of link:\n");
    p = head = (node *)malloc(sizeof(node));
    for(i = 0;i < n; i++)
    {
        scanf("%d", &p->data);    
        p->next = (node *)malloc(sizeof(node));
        q = p;
        p = p->next;
    }
    q->next = NULL;
    return head;
}

void print(node *head)
{
    node *s = head;
    while(s)
    {
        printf("%5d", s->data);
        s = s->next;
    }
    printf("\n");
}

node* combine(node *la, node *lb)
{
    node *p = la, *q = lb;
    node *tp, *tq, *temp;
    while(p && q)
    {
        tp      = p->next;
        tq      = q->next;
        p->next = q;
        q->next = tp;
        temp    = q;
        p       = tp;
        q       = tq;
    }
    temp->next = (q)? q :p;
    return la;
}
void main()
{
    node *la, *lb;
    la = create('A');
    printf("\nlink A is:");
    print(la);
    lb = create('B');
    printf("\nlink B is:");
    print(lb);
    printf("\nafter combined, the link  is:");
    print(combine(la, lb));
}

208 楼

////////////////////////////////////////////////////////////////////////////////
//
// 43. 44. (一元多项式加法) 实现两个整系数一元多项式的加法与乘法。例如, 对于多项式
//     5*X^6+4*X^3-7*X^4+1 与多项式 50*X^2+4*X, 运算结果为:
//                   5*X^6-7*X^4+4*X^3+50*X^2+4*X+1。
//                   250*x^8+20*x^7-350*x^6+172*x^5+16*x^4+50*x^2+4*x
//
//     程序要求:键盘输入多项式的各项系数及指数,每项系数及指数为一组数据(系
//     数及指数之一可为零),以'0 0'结束一个多项式的输入,结果按降幂排列,同类
//     项要合并(指数最大不超过30)。
//
//     上例第一式的输入为:    5 6
//                             4 3
//                            -7 4
//                             1 0
//                             0 0
//     输出结果应为:5*x^6-7*x^4+4*x^3+50*x^2+4*x+1.
//                   250*x^8+20*x^7-350*x^6+172*x^5+16*x^4+50*x^2+4*x.
////////////////////////////////////////////////////////////////////////////////

#include "stdio.h"
#include "malloc.h"
#include "memory.h"
#include "process.h"
typedef struct node
{
    int coe;
    int exp;
    node *next;
}node;

typedef struct
{
    int coe;
    int exp;
}elem;

typedef struct link
{
    node *head, *tail;
    int length;
}link;

bool initial(link &l)
{
    if(!(l.head = (node *)malloc(sizeof(node))))
        return false;
    l.tail = l.head;
    l.length = 0;
    return true;
}

void makenode(link &l, int coe, int exp)
{
    l.tail->next = (node *)malloc(sizeof(node));
    l.tail = l.tail->next;
    l.tail->coe  = coe;
    l.tail->exp  = exp;
    l.tail->next = NULL;
    ++l.length;
}

void print(link l)
{
    node *p = l.head->next;
    char *s;
    if(!p)
        return;    
    while(p)
    {
        s = (p == l.head->next)? ""
            :((p->coe > 0)?" +":" ");
        if(p->coe == 1)
        {
            if(p->exp == 1)
                printf("%sx", s);
            else if(p->exp == 0)
                printf("%s%d", s, p->coe);
            else
                printf("%sx^%d", s, p->exp);            
        }
        else
        {
            if(p->exp == 1)
                printf("%s%d*x", s, p->coe);
            else if(p->exp == 0)
                printf("%s%d", s, p->coe);
            else
                printf("%s%d*x^%d", s, p->coe, p->exp);
        }

        p = p->next;
    }
    printf("\t length = %d\n", l.length);
}

void create(link &l, char *s)
{
    int coe, exp;
    printf("\ninput the coefficient and exponential of the %s polynomial:\n", s);
    scanf("%d %d", &coe, &exp);
    while(coe)
    {
        makenode(l, coe, exp);
        scanf("%d %d", &coe, &exp);
    }
    printf("the %s polynomial is :\n", s);
    print(l);
}

void sort(elem *a, int size)
{
    elem *p, *q, temp;
    for(p = a; p< a +size -1; p++)
        for(q = p; q < a +size; q++)
            if(q->exp > p->exp)
            {
                temp = *q;
                *q   = *p;
                *p   = temp;
            }
}

void combine(elem *a, int size)
{
    int i, j, t;
    for(i = 0; i < size; i+= ++t)
    {
        for(j = i+1, t = 0; a[j].exp == a[i].exp && j < size; j++, t++)
        {
            a[i].coe += a[j].coe;
            a[j].coe =  0;
        }
    }
}

209 楼

void clearlink(link &l)
{
    node *p = l.head->next, *temp;
    while(p)
    {
        temp = p->next;
        free(p);
        p    = temp;
    }
    l.length = 0;
    l.head->next = NULL;
    l.tail = l.head;
}

void tidy(link &l)
{
    int size = l.length, i;
    elem *a  = new elem[size];
    memset(a, 0, size*sizeof(elem));

    node *p = l.head->next;
    for(i = 0; p; i++, p = p->next)
    {
        a[i].coe = p->coe;
        a[i].exp = p->exp;
    }

    sort(a, size);
    combine(a, size);
    clearlink(l);

    for(i = 0; i < size; i++)
    {
        if(a[i].coe == 0)
            continue;
        makenode(l, a[i].coe, a[i].exp);
    }
}
void multiply(link la, link lb)
{
    node *p, *q;
    link lc;
    if(!initial(lc))
    {
        printf("Initial false...\n");
        exit(-1);
    }

    for(p = la.head->next; p; p = p->next)
    {
        for(q = lb.head->next; q; q = q->next)
            makenode(lc, p->coe *q->coe, p->exp +q->exp);
    }
    printf("\nthe multi-polynomial is :\n");
    tidy(lc);
    print(lc);
    clearlink(lc);
}

void merge(link &la, link &lb)
{
    node *p;
    link lc;
    if(!initial(lc))
    {
        printf("Initial false...\n");
        exit(-1);
    }

    for(p = la.head->next; p; p = p->next)
        makenode(lc, p->coe, p->exp);
    for(p = lb.head->next; p; p = p->next)
        makenode(lc, p->coe, p->exp);
    printf("\nthe merge-polynomial is :\n");
    tidy(lc);
    print(lc);
    clearlink(lc);
}

void main()
{
    link la, lb;
    if(!initial(la) || !initial(lb))
    {
        printf("Initial false...\n");
        exit(-1);
    }
    create(la, "first");
    create(lb, "second");
    merge(la, lb);
    multiply(la, lb);
}

210 楼

要是有个最简洁的代码,供参考就好了!

我来回复

您尚未登录,请登录后再回复。点此登录或注册