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;
}