2013上机

2019-02-27  本文已影响0人  Chris_PaulCP3

2013

1、输出五位以内的对称素数(✔)
2、有一个天平,有六种砝码,分别重1,2,3,5,10,20克,每种砝码各有5,3,2,2,1,1个,计算天平能称出的重量及种类

#include<stdio.h>
#define NUM 6 //砝码的种类
#define MAX 58 //最大能称量的重量+1
int main(int argc, char **argv) {
int m[NUM] = { 1,2,3,5,10,20 }, n[NUM] = { 5,3,2,2,1,1 }, i[NUM];
int flag[MAX] = { 0 };//用于统计能称的出种类(与统计字符串中的flag类似)
for (i[0] = 0; i[0] <= n[0]; i[0]++)
    for (i[1] = 0; i[1] <= n[1]; i[1]++)
        for (i[2] = 0; i[2] <=n[2]; i[2]++)
            for (i[3] = 0; i[3] <= n[3]; i[3]++)
                for (i[4] = 0; i[4] <= n[4]; i[4]++)
                    for (i[5] = 0; i[5] <= n[5]; i[5]++)
                    {
                        int sum = 0;
                        int j;
                        for (j = 0; j < NUM; j++) {
                            sum += i[j] * m[j];
                        }
                        flag[sum]++;
                        printf("称量重量为%d的一种方法为[%d %d %d %d %d %d]\n", sum,i[0],i[1],i[2],i[3],i[4],i[5]);
                    }
printf("称量范围为:");
int f;
for (f = 0; f < MAX; f++)
    if (flag[f])
        printf("%d ", f);
return 0;
}

3、输入n个由‘0’和‘1’组成的字符串(n由用户输入),规定字符串的比较规则如下:
a.字符串长的比较大
b.字符串等长的含‘0’多的小
c.字符串等长,且含‘1’相等,则两字符串相等

将输入的n个字符串按照上述规则升序排列。
注:字符串头文件<string.h>
字符串拷贝函数strcpy(char *destination, char *source)
动态分配内存 void * malloc(int n); 头文件<stdlib.h>

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//还需要写一个check函数来检查输入是否正确 
int find_1(char ch[])
{
    int count = 0;
    int i = 0;
    while(ch[i] != '\0')
    {
        if(ch[i] == '1')
            count++;
        i++;
    }
    return count;
}
int main(int argc, char *argv[]) {
    int n;
    int i,j;
    char temp[10];
    printf("输入字符串个数:\n");
    scanf("%d",&n);
    //动态分配二维数组 
    char **ch = (char**)malloc(n*sizeof(char*));
    for(i = 0;i<n;i++)
    {
        ch[i] = (char*)malloc(10*sizeof(char));
    }
    printf("分配成功!");
    
    for(i=0; i<n; ++i)
        scanf("%s[^\n]",ch[i]);
    //选择排序 
    for(i=0; i<n-1; ++i)
        for(j=i+1; j<n ; ++j)
        {
            if(strlen(ch[i]) > strlen(ch[j]))
            {
                strcpy(temp, ch[i]);
                strcpy(ch[i], ch[j]);
                strcpy(ch[j], temp);
            }
            else if(strlen(ch[i]) == strlen(ch[j]) && find_1(ch[i]) > find_1(ch[j]))
            {
                //字符串交换 
                strcpy(temp, ch[i]);
                strcpy(ch[i], ch[j]);
                strcpy(ch[j], temp);
            }
        }
    printf("\n排序后: \n");
    for(i=0; i<n; ++i)
    {
        puts(ch[i]);
    }
    return 0;
}
上一篇 下一篇

猜你喜欢

热点阅读