C语言 错题本

C语言 错题本

  • 旨在将遇到的不会的, 难的, 错的编程题目写下来, 然后通过刷错题的方式以掌握此题.
    • 首先将错题弄懂, 可以是看视频讲解, 可以是网上查找资料, 也可以是问别人.
    • 其次将错题写在此处, 并作一个标记, 即7, 表示的是第七天要再写一次此题.
    • 第七天可以顺利的完成, 此题就算是掌握了, 就可以将它作一个标记, 即掌握, 如果没能够完成, 那么就要再次弄懂它, 然后做上标记, 21, 在第二十一天的时候再写一遍.
    • 最后写完这题标记掌握.

7

7月11号

今天7月5号, 7月11号写此题

整数求逆–掌握
  • 输入一个正整数, 输出逆序的数, 结尾的0逆序之后要求处理掉.

  • 分析:

    • 1.输入num
    • 2.每次循环把最后一位取出来
    • 3.剩余位重新赋值给num
    • 4.将个个位数合成一个整数进行输出
    • 5.进入循环的条件num>0
#include <stdio.h>

int main() {
	//输入
	int num;
	scanf("%d", &num);
	//每次循环把最后一位取出来
	int ret = 0; //结果变量
	while (num > 0) {
		//表每一位的变量
		int digit = 0;
		digit = num % 10;
		//剩余位重新赋值给num
		num /= 10;
		每次都将取出来的最后一位输出
		//printf("%d", digit);
		
		//让个个位数合成一个整数	// 123	1 2 3
									// 0+3=3 3*10=30 30+2=32 32*10=320 320+1=321
		ret += digit;
		ret *= 10;
	}
	ret /= 10;
	printf("%d ", ret);
	return 0;
}

7月12号

今天7月6号, 7月12号写此题

求符合给定条件的整数集
  • 给定不超过6的正整数A,考虑从A开始的连续4个数字。请输出所有由它们组成的无重复数字的3位数。

    • 输入格式:
      输入在一行中给出A。
    • 输出格式:
      输出满足条件的的3位数,要求从小到大,每行6个整数。整数间以空格分隔,但行末不能有多余空格。
    • 输入样例:
      2
    • 输出样例:
      234 235 243 245 253 254
      324 325 342 345 352 354
      423 425 432 435 452 453
      523 524 532 534 542 543
水仙花数
  • 水仙花数是指一个N位正整数(N>=3),它的每个位上的数字的N次幂之和等于它本身。
    例如:153 = 1^3 + 5^3+ 3^3。本题要求编写程序,计算所有N位水仙花数.

    • 输入格式:
      输入在一行中给出一个正整数N(3<=N<=7)。
    • 输出格式:
      按递增顺序输出所有N位水仙花数,每个数字占一行。
    • 输入样例:
      3
    • 输出样例:
      153
      370
      371
      407
打印九九口诀表–掌握
  • 下面是一个完整的下三角九九口诀表:
	1*1=1   
	1*2=2   2*2=4   
	1*3=3   2*3=6   3*3=9   
	1*4=4   2*4=8   3*4=12  4*4=16  
	1*5=5   2*5=10  3*5=15  4*5=20  5*5=25  
	1*6=6   2*6=12  3*6=18  4*6=24  5*6=30  6*6=36  
	1*7=7   2*7=14  3*7=21  4*7=28  5*7=35  6*7=42  7*7=49  
	1*8=8   2*8=16  3*8=24  4*8=32  5*8=40  6*8=48  7*8=56  8*8=64  
	1*9=9   2*9=18  3*9=27  4*9=36  5*9=45  6*9=54  7*9=63  8*9=72  9*9=81  
  • 本题要求对任意给定的1位正整数N,输出从11到NN的部分口诀表。

    • 输入格式:
      输入在一行中给出一个正整数N(1<=N<=9)。
    • 输出格式:
      输出下三角N*N部分口诀表,其中等号右边数字占4位、左对齐。
    • 输入样例:
      4
    • 输出样例:
      1*1=1   
      1*2=2   2*2=4   
      1*3=3   2*3=6   3*3=9   
      1*4=4   2*4=8   3*4=12  4*4=16 
      
  • 分析:

    • 1.输入n
    • 2.定义循环控制变量i和j, i是外层循环, j是内层循环(外层循环在每行中是不变的, 而内层循环是递增的, 但是在内层循环做完之后, 外层循环就会自增1)
    • 3.判断, 当i*j<=9时, 三个空格, >=10, 两个空格
#include <stdio.h>

int main() {
	//输入n
	int n;
	scanf("%d", &n);
	//外层循环
	for (int i = 1; i <= n; i++) {
		//内层循环控制变量初始化
		int j = 1;
		//内层循环
		for (int j = 1; j <= i; j++) {
			//每行中, 外层循环控制变量i是不变的, 而内层循环控制变量j是递增的
			printf("%d*%d=%d", j, i, j * i);
			//判断
			if (j * i <= 9) {
				printf("   ");
			}
			else if (j * i >= 10) {
				printf("  ");
			}
		}
		//外层循环循环一次, 则换行一次
		printf("\n");
	}
	return 0;
}
统计素数并求和–掌握
  • 本题要求统计给定整数M和N区间内素数的个数并对它们求和。

    • 输入格式:
      输入在一行中给出2个正整数M和N(1<=M<=N<=500)。
    • 输出格式:
      在一行中顺序输出M和N区间内素数的个数以及它们的和,数字间以空格分隔。
    • 输入样例:
      10 31
    • 输出样例:
      7 143
  • 分析:

    • 1.输入mn
    • 2.定义计数和求和变量
    • 3.外层循环产生m到n之间的数
    • 4.内层循环产生2到每次外层循环产生的这个数-1之间的数
    • 5.在内层循环中, 每次让外层的那个数试除内层的这些数, 如果能除尽, 直接停止
    • 6.如果内层的这些数试除完后都除不尽则说明这个数是素数, count++, sum += 这个数
#include <stdio.h>

int main() {
	//输入mn
	int m, n;
	scanf("%d %d", &m, &n);
	//计数和求和变量
	int count = 0;
	int sum = 0;
	//外层循环产生m到n之间的数
	//定义接收这些数的变量
	int num1 = m;
	while (num1 <= n) {
		//判断素数的变量
		int isPrime = 1;
		//处理1
		if (num1 == 1) {
			isPrime = 0;
		}
		//内层循环产生2到num1-1之间的数
		//接收这些数的变量
		int num2 = 0;
		for (num2 = 2; num2 < num1; num2++) {
			//num1试除num2
			if (num1 % num2 == 0) {
				isPrime = 0;
				break;
			}
		}
		if (isPrime == 1) {
			count++;
			sum += num1;
		}
		num1++;
	}
	printf("%d %d", count, sum);
	return 0;
}

7月13号

今天7月7号, 7月13号写此题

凑硬币
  • 如何用一角两角和五角的硬币凑出10元以下的金额? 提示: 排列组合
前n项和(一加一减)–掌握
  • f(n) = 1/1 - 1/2 + 1/3 - 1/4 + … + 1/n

    • 分析:
      • 1.输入n
      • 2.通项公式1/n
      • 3.定义正负号变量sign和求和变量sum和结果变量ret
      • 4.循环,产生1到n之间的数
      • 5.每次让sum += 1/这些数*sign
      • 6.每次让sign变一下正负号
#include <stdio.h>

int main() {
	//输入n
	int n;
	scanf("%d", &n);
	//定义变量
	double sum = 0.0;
	int sign = 1;
	//循环产生1到n之间的数
	for (int i = 1; i <= n; i++) {
		sum += 1.0 / i * sign;
		sign = -sign;
	}
	printf("f(%d) = %f", n, sum);
	return 0;
}
最大公约数–掌握
  • 输入两个数a和b,输出它们的最大公约数(是指两个或多个整数共有约数中最大的一个),提示:枚举法和辗转相除法
    • 分析(辗转相除法):
      • 1.输入a和b
      • 2.b==0, 则a是gcd
      • 3.否则, a%b = tmp
      • 4.a=b 5.tmp=b
#include <stdio.h>

int main() {
	//输入
	int a, b;
	scanf("%d %d", &a, &b);
	//循环
	while (b != 0) {
		int tmp = a % b;
		a = b;
		b = tmp;
	}
	printf("gcd = %d", a);
	return 0;
}

7月14号

今天7月9号, 7月14号写此题, 因为周一休息, 所以改成周天写

正序整数分解–掌握
  • 输入一个自然数, 正序输出它的每一位数字

    • 输入: 13425
    • 输出: 1 3 4 2 5
    • 分析:
      • 1.输入num
      • 2.判断它是几位数count
      • 3.循环count-1次, 每次ciMi*=10
      • 4.循环, digit=num/ciMi, num%=ciMi, ciMi/=10
      • 5.判断条件ciMi>0
      • 6.输出digit
      • 7.格式化, 判断
#include <stdio.h>

int main() {
	//输入
	int num;
	scanf("%d", &num);
	//判断num位数
	int ciMi = 1;
	int i = num; // 保留n的值
	while (i >= 10) {
		i /= 10;
		ciMi *= 10;
	}
	//循环
	while (ciMi > 0) {
		//第一位
		int digit = num / ciMi;
		//剩余位
		num %= ciMi;
		//ciMi变量调整
		ciMi /= 10;
		printf("%d", digit);
		//格式化
		if (ciMi > 0) {
			printf(" ");
		}
	}
	return 0;
}

7月17号

今天7月11号, 7月17号写此题

简单计算器–掌握
  • 模拟简单运算器的工作。假设计算器只能进行加减乘除运算,运算数和结果都是整数,4种运算符的优先级相同,按从左到右的顺序计算。

    • 输入格式:
      输入在一行中给出一个四则运算算式,没有空格,且至少有一个操作数。遇等号”=”说明输入结束。

    • 输出格式:
      在一行中输出算式的运算结果,或者如果除法分母为0或有非法运算符,则输出错误信息“ERROR”。

    • 输入样例:
      1+2*10-10/2=

    • 输出样例:
      10

    • 分析:

      • 1.输入num1
      • 2.循环输入c和num2
      • 3.判断c的类型
      • 4.循环条件c!=‘=’
      • 5.对result和c和num2进行运算
      • 6.异常处理
#include <stdio.h>

int main() {
	//输入num1
	int num1, num2;
	scanf("%d", &num1);
	//结果变量
	int result = num1;
	char c = 'a';
	while (c != '=') {
		//循环输入c
		scanf("%c", &c);
		//判断=
		if (c == '=') {
			break;
		}
		//输入num2
		scanf("%d", &num2);
		//异常处理变量
		int error = 1;
		//判断c的类型
		if (c == '+') {
			result += num2;
		}
		else if (c == '-') {
			result -= num2;
		}
		else if (c == '*') {
			result *= num2;
		}
		else if (c == '/') {
			if (num2 == 0) {
				printf("ERROR");
			}
			else result /= num2;
		}
		else {
			printf("ERROR");
		}
	}
	printf("%d", result);
	return 0;
}

7月23号

今天是7月17号, 7月23号写此题

换个格式输出整数
  • 让我们用字母B来表示“百”、字母S表示“十”,用“12…n”来表示个位数字n(<10),换个格式来输出任一个不超过3位的正整数。例如234应该被输出为BBSSS1234,因为它有2个“百”、3个“十”、以及个位的4。提示: 使用函数完成任务

    • 输入格式:每个测试输入包含1个测试用例,给出正整数n(<1000)。

    • 输出格式:每个测试用例的输出占一行,用规定的格式输出n。

    • 输入样例1:
      234

    • 输出样例1:
      BBSSS1234

    • 输入样例2:
      23

    • 输出样例2:
      SS123

A+B和C–掌握
  • 给定区间[-231, 231]内的3个整数A、B和C,请判断A+B是否大于C。

    • 输入格式:
      输入第1行给出正整数T(<=10),是测试用例的个数。随后给出T组测试用例,每组占一行,顺序给出A、B和C。整数间以空格分隔。
    • 输出格式:
      对每组测试用例,在一行中输出“Case #X: true”如果A+B>C,否则输出“Case #X: false”,其中X是测试用例的编号(从1开始)。
    • 输入样例:
      4
      1 2 3
      2 3 4
      2147483647 0 2147483646
      0 -2147483648 -2147483647
    • 输出样例:
      Case #1: false
      Case #2: true
      Case #3: true
      Case #4: false
    • 分析:
      • 1.输入t当作循环次数
      • 2.每次循环输入abc
      • 3.函数判断a+b是否>c
#include <stdio.h>

void daXiao(int a, int b, int c, int i);

int main(void) {
	//输入t, 为循环次数
	int t;
	scanf("%d", &t);
	for (int i = 0; i < t; i++) {
		//循环输入abc
		int a, b, c;
		scanf("%d %d %d", &a, &b, &c);
		//函数判断
		daXiao(a, b, c, i);
	}
	return 0;
}
void daXiao(int a, int b, int c, int i) {
	if (a + b > c) {
		printf("Case #%d: true\n", i);
	}
	else {
		printf("Case #%d: false\n", i);
	}
}

7月24号

今天是7月18号, 7月24号写此题

判断素数的五种方法以及构造素数表
井字棋

7月25号

今天是7月19号, 7月25号写此题

求一批整数中出现最多的个位数字
  • 给定一批整数,分析每个整数的每一位数字,求出现次数最多的个位数字。例如给定3个整数1234、2345、3456,其中出现最多次数的数字是3和4,均出现了3次。

    • 输入格式:
      输入在第1行中给出正整数N(<=1000),在第2行中给出N个不超过整型范围的正整数,数字间以空格分隔。

    • 输出格式:
      在一行中按格式“M: n1 n2 …”输出,其中M是最大次数,n1、n2、……为出现次数最多的个位数字,按从小到大的顺序排列。数字间以空格分隔,但末尾不得有多余空格。

    • 输入样例:
      3
      1234 2345 3456

    • 输出样例:
      3: 3 4

      分析:
      1.输入n 2.定义数组 3.

求矩阵的局部极大值
  • 给定M行N列的整数矩阵A,如果A的非边界元素A[i][j]大于相邻的上下左右4个元素,那么就称元素A[i][j]是矩阵的局部极大值。本题要求给定矩阵的全部局部极大值及其所在的位置。

    • 输入格式:
      输入在第1行中给出矩阵A的行数M和列数N(3<=M,N<=20);最后M行,每行给出A在该行的N个元素的值。数字间以空格分隔。

    • 输出格式:
      每行按照“元素值 行号 列号”的格式输出一个局部极大值,其中行、列编号从1开始。要求按照行号递增输出;若同行有超过1个局部极大值,则该行按列号递增输出。若没有局部极大值,则输出“None 总行数 总列数”。

    • 输入样例1: 1.输入m和n 2.
      4 5
      1 1 1 1 1
      1 3 9 3 1
      1 5 3 5 1
      1 1 1 1 1

    • 输出样例1:
      9 2 3
      5 3 2
      5 3 4

    • 输入样例2:
      3 5
      1 1 1 1 1
      9 3 9 9 1
      1 5 3 5 1

    • 输出样例2:
      None 3 5

      分析:
      1.

组个最小数
  • 给定数字0-9各若干个。你可以以任意顺序排列这些数字,但必须全部使用。目标是使得最后得到的数尽可能小(注意0不能做首位)。例如:给定两个0,两个1,三个5,一个8,我们得到的最小的数就是10015558。现给定数字,请编写程序输出能够组成的最小的数。

    • 输入格式:
      每个输入包含1个测试用例。每个测试用例在一行中给出10个非负整数,顺序表示我们拥有数字0、数字1、……数字9的个数。整数间用一个空格分隔。10个数字的总个数不超过50,且至少拥有1个非0的数字。
    • 输出格式:
      在一行中输出能够组成的最小的数。
    • 输入样例:
      2 2 0 0 0 3 0 0 1 0
    • 输出样例:
      10015558

7月31号

今天是7月25号, 7月31号写此题

说反话
  • 给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。

    • 输入格式:
      测试输入包含一个测试用例,在一行内给出总长度不超过80的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用1个空格分开,输入保证句子末尾没有多余的空格。
    • 输出格式:
      每个测试用例的输出占一行,输出倒序后的句子。
    • 输入样例:
      Hello World Here I Come
    • 输出样例:
      Come I Here World Hello
删除字符串中的子串
  • 输入2个字符串S1和S2,要求删除字符串S1中出现的所有子串S2,即结果字符串中不能包含S2。

    • 输入格式:
      输入在2行中分别给出不超过80个字符长度的、以回车结束的2个非空字符串,对应S1和S2。
    • 输出格式:
      在一行中输出删除字符串S1中出现的所有子串S2后的结果字符串。
    • 输入样例:
      Tomcat is a male ccatat
      cat
    • 输出样例:
      Tom is a male
字符串循环左移
  • 输入一个字符串和一个非负整数N,要求将字符串循环左移N次。

    • 输入格式:
      输入在第1行中给出一个不超过100个字符长度的、以回车结束的非空字符串;第2行给出非负整数N。
    • 输出格式:
      在一行中输出循环左移N次后的字符串。
    • 输入样例:
      Hello World!
      2
    • 输出样例:
      llo World!He

8月2号

今天是7月22号, 8月2号写此题

平面向量加法–掌握
  • 本题要求编写程序,计算两个二维平面向量的和向量。

    • 输入格式:
      输入在一行中按照“x1 y1 x2 y2”的格式给出两个二维平面向量V1=(x1, y1)和V2=(x2, y2)的分量。
    • 输出格式:
      在一行中按照“(x, y)”的格式输出和向量,坐标输出小数点后1位(注意不能输出-0.0)。
    • 输入样例:
      3.5 -2.7 -13.9 8.7
    • 输出样例:
      (-10.4, 6.0)
    • 分析:
      • 分析:
        • 1.声明结构体
        • 2.输入, 定义结构体变量
        • 3.求和
        • 4.fabs()函数取绝对值
        • 5.输出
#include <stdio.h>
#include <math.h>

typedef struct {
	double x;
	double y;
} XY;

int main(int argc, char const* argv[]) {
	//输入
	XY x1, y1, x2, y2;
	scanf("%lf %lf %lf %lf", &x1.x, &y1.y, &x2.x, &y2.y);
	//printf("%f %f %f %f", x1.x, y1.y, x2.x, y2.y);

	//求和, fabs()取绝对值
	double x3, y3;
	x3 = fabs(x1.x + x2.x);
	y3 = fabs(y1.y + y2.y);
	printf("(%.1f, %.1f)", x3, y3);
		return 0;
}
通讯录的录入与显示
  • 通讯录中的一条记录包含下述基本信息:朋友的姓名、出生日期、性别、固定电话号码、移动电话号码。本题要求编写程序,录入N条记录,并且根据要求显示任意某条记录。

    • 输入格式:
      输入在第1行给出正整数N(<=10);随后N行,每行按照格式“姓名 生日 性别 固话 手机”给出一条记录。其中“姓名”是不超过10个字符、不包含空格的非空字符串;生日按“yyyy/mm/dd”的格式给出年月日;性别用“M”表示“男”、“F”表示“女”;“固话”和“手机”均为不超过15位的连续数字,前面有可能出现“+”。
      在通讯录记录输入完成后,最后一行给出正整数K,并且随后给出K个整数,表示要查询的记录编号(从0到N-1顺序编号)。数字间以空格分隔。
    • 输出格式:
      对每一条要查询的记录编号,在一行中按照“姓名 固话 手机 性别 生日”的格式输出该记录。若要查询的记录不存在,则输出“Not Found”。
    • 输入样例:
      3
      Chris 1984/03/10 F +86181779452 13707010007
      LaoLao 1967/11/30 F 057187951100 +8618618623333
      QiaoLin 1980/01/01 M 84172333 10086
      2 1 7
    • 输出样例:
      LaoLao 057187951100 +8618618623333 F 1967/11/30
      Not Found

8月5号

今天是7月30号, 8月5号写此题

输出一个数的二进制数
  • 输出一个数的二进制数

21

7月26号

今天是7月12号, 7月26号再次写此题, 也就是两个星期之后

求符合给定条件的整数集
  • 给定不超过6的正整数A,考虑从A开始的连续4个数字。请输出所有由它们组成的无重复数字的3位数。

    • 输入格式:
      输入在一行中给出A。
    • 输出格式:
      输出满足条件的的3位数,要求从小到大,每行6个整数。整数间以空格分隔,但行末不能有多余空格。
    • 输入样例:
      2
    • 输出样例:
      234 235 243 245 253 254
      324 325 342 345 352 354
      423 425 432 435 452 453
      523 524 532 534 542 543
水仙花数–掌握
  • 水仙花数是指一个N位正整数(N>=3),它的每个位上的数字的N次幂之和等于它本身。
    例如:153 = 1^3 + 5^3+ 3^3。本题要求编写程序,计算所有N位水仙花数.

    • 输入格式:
      输入在一行中给出一个正整数N(3<=N<=7)。
    • 输出格式:
      按递增顺序输出所有N位水仙花数,每个数字占一行。
    • 输入样例:
      3
    • 输出样例:
      153
      370
      371
      407
    • 分析:
      • 1.输入n
      • 2.产生所有的n位数
      • 3.将这些数的每一位都取出来
      • 4.每一位的n次幂求和
      • 5.判断这个数与求出的和是否相等
      • 6.输出
#include <stdio.h>

int main(int argc, char const* argv[]) {
    //输入
    int n;
    scanf("%d", &n);
    //产生所有的n位数
    int num = 1;
    for (int i = 1; i < n; i++) {
        num *= 10;
    }
    int right = num * 10;
    while (num < right) {
        //求和变量
        int sum = 0;
        //保留num的值
        int num2 = num;
        //将num的每一位数都取出来
        while (num2 > 0) {
            int digit = num2 % 10;
            num2 /= 10;
            //循环求digit的n次幂
            //次幂变量
            int p = 1;
            for (int j = 0; j < n; j++) {
                p *= digit;
            }
            sum += p;
        }
        //判断num是否等于sum
        if (num == sum) {
            printf("%d\n", num);
        }
        num++;
    }
    return 0;
}

7月27号

今天7月13号, 7月27号再次写此题, 也就是两个星期之后

凑硬币
  • 如何用一角两角和五角的硬币凑出10元以下的金额? 提示: 排列组合

8月12号

今天是7月23号, 8月12号写此题

换个格式输出整数
  • 让我们用字母B来表示“百”、字母S表示“十”,用“12…n”来表示个位数字n(<10),换个格式来输出任一个不超过3位的正整数。例如234应该被输出为BBSSS1234,因为它有2个“百”、3个“十”、以及个位的4。提示: 使用函数完成任务

    • 输入格式:每个测试输入包含1个测试用例,给出正整数n(<1000)。

    • 输出格式:每个测试用例的输出占一行,用规定的格式输出n。

    • 输入样例1:
      234

    • 输出样例1:
      BBSSS1234

    • 输入样例2:
      23

    • 输出样例2:
      SS123

8月13号

今天是7月24号, 8月13号写此题

判断素数的五种方法以及构造素数表
井字棋

8月14号

今天是7月25号, 8月14号写此题

求一批整数中出现最多的个位数字
  • 给定一批整数,分析每个整数的每一位数字,求出现次数最多的个位数字。例如给定3个整数1234、2345、3456,其中出现最多次数的数字是3和4,均出现了3次。

    • 输入格式:
      输入在第1行中给出正整数N(<=1000),在第2行中给出N个不超过整型范围的正整数,数字间以空格分隔。

    • 输出格式:
      在一行中按格式“M: n1 n2 …”输出,其中M是最大次数,n1、n2、……为出现次数最多的个位数字,按从小到大的顺序排列。数字间以空格分隔,但末尾不得有多余空格。

    • 输入样例:
      3
      1234 2345 3456

    • 输出样例:
      3: 3 4

      分析:
      1.输入n 2.定义数组 3.

求矩阵的局部极大值
  • 给定M行N列的整数矩阵A,如果A的非边界元素A[i][j]大于相邻的上下左右4个元素,那么就称元素A[i][j]是矩阵的局部极大值。本题要求给定矩阵的全部局部极大值及其所在的位置。

    • 输入格式:
      输入在第1行中给出矩阵A的行数M和列数N(3<=M,N<=20);最后M行,每行给出A在该行的N个元素的值。数字间以空格分隔。

    • 输出格式:
      每行按照“元素值 行号 列号”的格式输出一个局部极大值,其中行、列编号从1开始。要求按照行号递增输出;若同行有超过1个局部极大值,则该行按列号递增输出。若没有局部极大值,则输出“None 总行数 总列数”。

    • 输入样例1: 1.输入m和n 2.
      4 5
      1 1 1 1 1
      1 3 9 3 1
      1 5 3 5 1
      1 1 1 1 1

    • 输出样例1:
      9 2 3
      5 3 2
      5 3 4

    • 输入样例2:
      3 5
      1 1 1 1 1
      9 3 9 9 1
      1 5 3 5 1

    • 输出样例2:
      None 3 5

      分析:
      1.

组个最小数
  • 给定数字0-9各若干个。你可以以任意顺序排列这些数字,但必须全部使用。目标是使得最后得到的数尽可能小(注意0不能做首位)。例如:给定两个0,两个1,三个5,一个8,我们得到的最小的数就是10015558。现给定数字,请编写程序输出能够组成的最小的数。

    • 输入格式:
      每个输入包含1个测试用例。每个测试用例在一行中给出10个非负整数,顺序表示我们拥有数字0、数字1、……数字9的个数。整数间用一个空格分隔。10个数字的总个数不超过50,且至少拥有1个非0的数字。
    • 输出格式:
      在一行中输出能够组成的最小的数。
    • 输入样例:
      2 2 0 0 0 3 0 0 1 0
    • 输出样例:
      10015558

8月15号

今天是7月26号, 8月15号再次写此题, 也就是两个星期之后

求符合给定条件的整数集
  • 给定不超过6的正整数A,考虑从A开始的连续4个数字。请输出所有由它们组成的无重复数字的3位数。

    • 输入格式:
      输入在一行中给出A。
    • 输出格式:
      输出满足条件的的3位数,要求从小到大,每行6个整数。整数间以空格分隔,但行末不能有多余空格。
    • 输入样例:
      2
    • 输出样例:
      234 235 243 245 253 254
      324 325 342 345 352 354
      423 425 432 435 452 453
      523 524 532 534 542 543

8月16号

今天是7月27号, 8月16号再次写此题, 也就是两个星期之后

凑硬币
  • 如何用一角两角和五角的硬币凑出10元以下的金额? 提示: 排列组合

8月15号

今天是8月1号, 8月15号写此题

说反话
  • 给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。

    • 输入格式:
      测试输入包含一个测试用例,在一行内给出总长度不超过80的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用1个空格分开,输入保证句子末尾没有多余的空格。
    • 输出格式:
      每个测试用例的输出占一行,输出倒序后的句子。
    • 输入样例:
      Hello World Here I Come
    • 输出样例:
      Come I Here World Hello
删除字符串中的子串
  • 输入2个字符串S1和S2,要求删除字符串S1中出现的所有子串S2,即结果字符串中不能包含S2。

    • 输入格式:
      输入在2行中分别给出不超过80个字符长度的、以回车结束的2个非空字符串,对应S1和S2。
    • 输出格式:
      在一行中输出删除字符串S1中出现的所有子串S2后的结果字符串。
    • 输入样例:
      Tomcat is a male ccatat
      cat
    • 输出样例:
      Tom is a male
字符串循环左移
  • 输入一个字符串和一个非负整数N,要求将字符串循环左移N次。

    • 输入格式:
      输入在第1行中给出一个不超过100个字符长度的、以回车结束的非空字符串;第2行给出非负整数N。
    • 输出格式:
      在一行中输出循环左移N次后的字符串。
    • 输入样例:
      Hello World!
      2
    • 输出样例:
      llo World!He

8月20号

今天是8月2号, 8月20号写此题

通讯录的录入与显示
  • 通讯录中的一条记录包含下述基本信息:朋友的姓名、出生日期、性别、固定电话号码、移动电话号码。本题要求编写程序,录入N条记录,并且根据要求显示任意某条记录。

    • 输入格式:
      输入在第1行给出正整数N(<=10);随后N行,每行按照格式“姓名 生日 性别 固话 手机”给出一条记录。其中“姓名”是不超过10个字符、不包含空格的非空字符串;生日按“yyyy/mm/dd”的格式给出年月日;性别用“M”表示“男”、“F”表示“女”;“固话”和“手机”均为不超过15位的连续数字,前面有可能出现“+”。
      在通讯录记录输入完成后,最后一行给出正整数K,并且随后给出K个整数,表示要查询的记录编号(从0到N-1顺序编号)。数字间以空格分隔。
    • 输出格式:
      对每一条要查询的记录编号,在一行中按照“姓名 固话 手机 性别 生日”的格式输出该记录。若要查询的记录不存在,则输出“Not Found”。
    • 输入样例:
      3
      Chris 1984/03/10 F +86181779452 13707010007
      LaoLao 1967/11/30 F 057187951100 +8618618623333
      QiaoLin 1980/01/01 M 84172333 10086
      2 1 7
    • 输出样例:
      LaoLao 057187951100 +8618618623333 F 1967/11/30
      Not Found

8月23号

今天是8月5号, 8月23号写此题

输出一个数的二进制数
  • 输出一个数的二进制数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值