C语言算法训练题

合集下载

c语言算法100例

c语言算法100例

c语言算法100例以下是一些经典的C语言算法题目,总共提供100个例子供你练习和学习:1.编写一个程序,计算并输出斐波那契数列的前20个数。

2.编写一个程序,判断一个数是否为素数。

3.编写一个程序,计算并输出一个数的阶乘。

4.编写一个程序,实现两个数的交换(不使用第三个变量)。

5.编写一个程序,找出一个数组中的最大值。

6.编写一个程序,将一个字符串反转。

7.编写一个程序,判断一个字符串是否为回文字符串。

8.编写一个程序,实现冒泡排序算法对一个数组进行排序。

9.编写一个程序,实现二分查找算法在一个有序数组中查找指定的元素。

10.编写一个程序,计算并输出斐波那契数列的第n个数。

11.编写一个程序,将一个二维数组顺时针旋转90度。

12.编写一个程序,计算并输出一个数的平方根。

13.编写一个程序,判断一个字符串中是否包含重复字符。

14.编写一个程序,实现插入排序算法对一个数组进行排序。

15.编写一个程序,将一个有序数组合并为一个有序数组。

16.编写一个程序,判断一个数是否为完全数(即所有因子之和等于该数本身)。

17.编写一个程序,计算并输出一个数的倒数。

18.编写一个程序,判断一个字符串是否是另一个字符串的子串。

19.编写一个程序,实现选择排序算法对一个数组进行排序。

20.编写一个程序,计算并输出两个数的最大公约数。

21.编写一个程序,实现快速排序算法对一个数组进行排序。

22.编写一个程序,将一个字符串中的所有空格替换为指定的字符。

23.编写一个程序,判断一个数是否是回文数。

24.编写一个程序,计算并输出两个数的最小公倍数。

25.编写一个程序,实现归并排序算法对一个数组进行排序。

26.编写一个程序,判断一个字符串是否是有效的括号串。

27.编写一个程序,计算并输出一个数的立方根。

28.编写一个程序,实现堆排序算法对一个数组进行排序。

29.编写一个程序,判断一个数是否是质数。

30.编写一个程序,计算并输出一个数的二进制表示。

c题库及详解答案

c题库及详解答案

c题库及详解答案根据您提供的标题“c题库及详解答案”,正文内容可以是:C题库及详解答案C语言是一种广泛使用的计算机编程语言,以其高效、灵活和功能强大而著称。

以下是一些常见的C语言编程题目及其详解答案,供学习者参考和练习。

1. 题目:求两个数的最大公约数解答:使用辗转相除法(欧几里得算法)可以求得两个数的最大公约数。

以下是一个C语言程序示例:```c#include <stdio.h>int gcd(int a, int b) {while (b != 0) {int temp = b;b = a % b;a = temp;}return a;}int main() {int num1, num2;printf("请输入两个整数:");scanf("%d %d", &num1, &num2);printf("最大公约数是:%d\n", gcd(num1, num2));return 0;}```2. 题目:实现字符串反转解答:通过遍历字符串并使用数组的索引特性,可以轻松实现字符串的反转。

以下是C语言程序示例:```c#include <stdio.h>#include <string.h>void reverseString(char str[]) {int length = strlen(str);for (int i = 0; i < length / 2; i++) {char temp = str[i];str[i] = str[length - i - 1];str[length - i - 1] = temp;}}int main() {char str[100];printf("请输入一个字符串:");scanf("%s", str);reverseString(str);printf("反转后的字符串是:%s\n", str);return 0;}```3. 题目:计算一个数的阶乘解答:阶乘可以通过递归或循环来计算。

C语言算法训练题

C语言算法训练题

C训练题一题1:未名湖边的烦恼每年冬天,北大未名湖上都是滑冰的好地方。

北大体育组准备了许多冰鞋,可是人太多了,每天下午收工后,常常一双冰鞋都不剩。

每天早上,租鞋窗口都会排起长龙,假设有还鞋的m个,有需要租鞋的n个。

现在的问题是,这些人有多少种排法,可以避免出现体育组没有冰鞋可租的尴尬场面。

(两个同样需求的人(比如都是租鞋或都是还鞋)交换位置是同一种排法)输入格式两个整数,表示m和n输出格式一个整数,表示队伍的排法的方案数。

样例输入3 2样例输出5数据规模和约定m,n∈[0,18]问题分析题2:最大的算式题目很简单,给出N个数字,不改变它们的相对位置,在中间加入K个乘号和N-K-1个加号,(括号随便加)使最终结果尽量大。

因为乘号和加号一共就是N-1个了,所以恰好每两个相邻数字之间都有一个符号。

例如:N=5,K=2,5个数字分别为1、2、3、4、5,可以加成:1*2*(3+4+5)=241*(2+3)*(4+5)=45(1*2+3)*(4+5)=45……输入格式输入文件共有二行,第一行为两个有空格隔开的整数,表示N和K,其中(2<=N<=15, 0<=K<=N-1)。

第二行为 N个用空格隔开的数字(每个数字在0到9之间)。

输出格式输出文件仅一行包含一个整数,表示要求的最大的结果样例输入5 21 2 3 4 5样例输出120样例说明(1+2+3)*4*5=120题3:图形显示编写一个程序,首先输入一个整数,例如5,然后在屏幕上显示如下的图形(5表示行数):* * * * ** * * ** * ** **题4:排序编写一个程序,输入3个整数,然后程序将对这三个整数按照从大到小进行排列。

输入格式:输入只有一行,即三个整数,中间用空格隔开。

输出格式:输出只有一行,即排序后的结果。

输入输出样例样例输入9 2 30样例输出30 9 2题5:2的次幂表示任何一个正整数都可以用2进制表示,例如:137的2进制表示为10001001。

C语言练习题(山东科技大学吐血整理)

C语言练习题(山东科技大学吐血整理)

数学11—1 C语言平时训练题1、算术基本运算Description计算两整数x和y(0〈x,y<1000)的和、差、积、商、余数、x的平方和y的三次方。

Input输入只有一行.Output输出为多行,按顺序每行输出x,y的和、差、积、商、余数、x的平方和y的三次方。

Sample Inputx = 11, y = 3Sample Outputx + y : 14x - y : 8x * y : 33x / y quotient: 3, remainder: 2x ^ 2 : 121y ^ 3 : 27Answer#include 〈stdio.h>int main(){int x,y,a,b,c,d,e,f,g;0<x〈1000,0<y<1000;scanf(”x = %d, y = %d”,&x,&y);a=x+y;b=x-y;c=x*y;d=x/y;e=x%y;f=x*x;g=y*y*y;printf(”x + y : %d\n”,a);printf("x - y :%d\n",b);printf("x * y : %d\n”,c);printf("x / y quotient: %d, remainder: %d\n”,d,e);printf(”x ^ 2 : %d\n”,f);printf(”y ^ 3 : %d\n”,g);return 0;}2、求圆的面积和周长Description从键盘输入圆的半径,求圆的面积和周长,圆周率取3.14。

Input输入一个浮点型数据,有效数字不会超过十进制的6位。

Output输出为两行。

第一行为圆的面积,第二行为圆的周长,格式见sample。

Sample Input3Sample OutputArea: 28。

260000Perimeter: 18.840000Answer#include〈stdio。

C语言算法经典习题及其答案详解

C语言算法经典习题及其答案详解

C语言算法经典习题及其答案详解C语言是一门广泛应用于计算机科学和工程领域的编程语言。

在学习C语言的过程中,算法是一个重要的部分。

通过进行算法习题的练习,不仅可以加深对C语言的理解,还可以提高编程能力。

本文将介绍一些经典的C语言算法习题,并提供详细的答案解析。

一、习题一:求两个数的和题目描述:给定两个整数,要求编写程序计算它们的和,并输出结果。

解析:这是一个非常简单的题目,只需要使用加法运算符即可完成。

示例代码如下:```#include <stdio.h>int main() {int num1, num2;printf("请输入两个整数:");scanf("%d %d", &num1, &num2);int sum = num1 + num2;printf("它们的和是:%d\n", sum);return 0;```二、习题二:计算阶乘题目描述:给定一个正整数n,计算n的阶乘,并输出结果。

解析:阶乘的计算需要使用循环结构。

我们可以使用for循环从1到n逐个相乘,得到n的阶乘。

示例代码如下:```#include <stdio.h>int main() {int n;printf("请输入一个正整数:");scanf("%d", &n);int factorial = 1;for (int i = 1; i <= n; i++) {factorial *= i;}printf("%d的阶乘是:%d\n", n, factorial);return 0;}三、习题三:判断一个数是否为素数题目描述:给定一个正整数n,判断它是否为素数,并输出结果。

解析:素数的定义是只能被1和自身整除的数。

我们可以使用循环进行判断,若n能被2到n-1之间的任何一个数整除,则说明它不是素数;否则,它是素数。

c语言算法编程题

c语言算法编程题

c语言算法编程题在计算机科学中,算法是一种描述计算机如何执行特定任务的方法。

编程题是用来测试学生对于特定算法的理解和应用能力的题目。

下面是一些C语言算法编程题的示例。

1.斐波那契数列给定一个正整数n,编写一个C程序来生成斐波那契数列的前n 个数。

例如,给定n=10,输出应该是:0,1,1,2,3,5,8,13,21,34。

算法思路:斐波那契数列是一个递归定义的数列,但是我们可以通过动态规划来优化它。

我们可以使用一个数组来存储已经计算过的值,以避免重复计算。

具体来说,我们可以用一个长度为n+1的数组来存储斐波那契数列的值,其中第一个和第二个元素分别为0和1。

然后,对于每个位置i,其值等于前两个位置i-1和i-2的值之和。

C语言代码示例:```c#include<stdio.h>intfibonacci(intn){intprev_two_sum=0;intprev=0;intcurr=1;for(inti=2;i<=n;i++){prev_two_sum+=prev;prev=curr;curr=prev_two_sum;}returncurr;}```2.最长回文子串给定一个字符串s,编写一个C程序来找到最长的回文子串。

例如,对于字符串"abcdcba",最长的回文子串是"cdcba"。

算法思路:可以使用动态规划来解决这个问题。

我们定义一个二维数组dp,其中dp[i][j]表示字符串s从索引i到索引j的子串是否是回文的。

然后,我们可以通过填充dp数组来找到最长回文子串。

具体来说,我们遍历字符串s的每个字符,对于每个字符i,我们检查其左边的字符j(j<i),如果s[i]和s[j]相等并且dp[i][j]未被填充,则将dp[i][j]设置为1。

最后,最长回文子串就是dp数组中最大的子串长度。

C语言代码示例:```c#include<stdio.h>#include<string.h>intlongestPalindrome(char*s){intn=strlen(s);intmax_len=1;inti,j;for(i=0;i<n;i++){for(j=i+1;j<n;j++){if(s[i]==s[j]){if(j-i>max_len){max_len=j-i;}elseif(j-i==max_len&&s[i]<s[j]){max_len=max(max_len,j-i+1);//如果出现更长的回文子串,更新最大长度}}else{//如果不相等,则跳出内层循环break;}}}returnmax_len;}```这些只是C语言算法编程题的一些示例,实际上还有很多其他类型的题目,例如寻找数组中的最大/最小元素、寻找数组中的重复元素等等。

c语言算法笔试题

c语言算法笔试题

c语言算法笔试题
以下是一些C语言算法笔试题,以检验您的相关知识和技能。

选择题:以下哪个是正确的C语言数据类型?
A. int float
B. char short
C. string long
D. void float
填空题:C语言中的while循环需要用________关键字来声明。

简答题:写出计算数组元素平均值的C语言代码。

编程题:编写一个C语言程序,将两个整数相加并输出结果。

案例分析题:给定一个整数数组,编写一个函数来查找数组中是否存在重复元素。

如果存在重复元素,则返回true;否则返回false。

论述题:阐述C语言中指针的概念和用途,并给出使用指针时需要注意的事项。

c语言算术运算符20题与答案(较难)

c语言算术运算符20题与答案(较难)

1. 复杂表达式计算题目:计算的结果。

答案:132. 复合运算符和优先级题目:计算的结果。

答案:73. 自增运算符在表达式中的使用题目:如果那么的值是多少?答案:124. 自减运算符在表达式中的使用题目:如果那么的值是多少?答案:25. 结合性运算题目:计算的结果。

答案:66. 复合赋值运算符和优先级题目:如果那么的值是多少?答案:-107. 类型转换的陷阱题目:如果那么和的值分别是多少?答案:a = 2, b = 2.08. 强制类型转换题目:如果那么的值是多少?答案:2.09. 浮点数计算题目:计算的结果。

答案:6.010. 复合赋值运算符题目:如果那么的值是多少?答案:2011. 递增和递减混合使用题目:如果那么的值是多少?答案:812. 复杂的混合类型运算题目:计算的结果。

答案:5.513. 运算符优先级和结合性题目:计算的结果。

答案:1014. 递增和复合赋值题目:如果那么的值是多少?答案:1115. 复合运算符和优先级题目:如果那么的值是多少?答案:416. 复杂的复合赋值运算题目:如果那么的值是多少?答案:1517. 运算符结合性题目:计算的结果。

答案:718. 自增运算和优先级题目:如果那么的值是多少?答案:719. 类型转换在复合表达式中的作用题目:计算的结果。

答案:20.020. 递增和递减与赋值题目:如果那么的值是多少?答案:5。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C训练题一题1:未名湖边的烦恼每年冬天,北大未名湖上都是滑冰的好地方。

北大体育组准备了许多冰鞋,可是人太多了,每天下午收工后,常常一双冰鞋都不剩。

每天早上,租鞋窗口都会排起长龙,假设有还鞋的m个,有需要租鞋的n个。

现在的问题是,这些人有多少种排法,可以避免出现体育组没有冰鞋可租的尴尬场面。

(两个同样需求的人(比如都是租鞋或都是还鞋)交换位置是同一种排法)输入格式两个整数,表示m和n输出格式一个整数,表示队伍的排法的方案数。

样例输入3 2样例输出5数据规模和约定m,n∈[0,18]问题分析题2:最大的算式题目很简单,给出N个数字,不改变它们的相对位置,在中间加入K个乘号和N-K-1个加号,(括号随便加)使最终结果尽量大。

因为乘号和加号一共就是N-1个了,所以恰好每两个相邻数字之间都有一个符号。

例如:N=5,K=2,5个数字分别为1、2、3、4、5,可以加成:1*2*(3+4+5)=241*(2+3)*(4+5)=45(1*2+3)*(4+5)=45……输入格式输入文件共有二行,第一行为两个有空格隔开的整数,表示N和K,其中(2<=N<=15, 0<=K<=N-1)。

第二行为 N个用空格隔开的数字(每个数字在0到9之间)。

输出格式输出文件仅一行包含一个整数,表示要求的最大的结果样例输入5 21 2 3 4 5样例输出120样例说明(1+2+3)*4*5=120题3:图形显示编写一个程序,首先输入一个整数,例如5,然后在屏幕上显示如下的图形(5表示行数):* * * * ** * * ** * ** **题4:排序编写一个程序,输入3个整数,然后程序将对这三个整数按照从大到小进行排列。

输入格式:输入只有一行,即三个整数,中间用空格隔开。

输出格式:输出只有一行,即排序后的结果。

输入输出样例样例输入9 2 30样例输出30 9 2题5:2的次幂表示任何一个正整数都可以用2进制表示,例如:137的2进制表示为10001001。

将这种2进制表示写成2的次幂的和的形式,令次幂高的排在前面,可得到如下表达式:137=2^7+2^3+2^0现在约定幂次用括号来表示,即a^b表示为a(b)此时,137可表示为:2(7)+2(3)+2(0)进一步:7=2^2+2+2^0 (2^1用2表示)3=2+2^0所以最后137可表示为:2(2(2)+2+2(0))+2(2+2(0))+2(0)又如:1315=2^10+2^8+2^5+2+1所以1315最后可表示为:2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)输入格式正整数(1<=n<=20000)输出格式符合约定的n的0,2表示(在表示中不能有空格)样例输入137样例输出2(2(2)+2+2(0))+2(2+2(0))+2(0)样例输入1315样例输出2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)提示用递归实现会比较简单,可以一边递归一边输出题6:前缀表达式编写一个程序,以字符串方式输入一个前缀表达式,然后计算它的值。

输入格式为:“运算符对象1 对象2”,其中,运算符为“+”(加法)、“-”(减法)、“*”(乘法)或“/”(除法),运算对象为不超过10的整数,它们之间用一个空格隔开。

要求:对于加、减、乘、除这四种运算,分别设计相应的函数来实现。

输入格式:输入只有一行,即一个前缀表达式字符串。

输出格式:输出相应的计算结果(如果是除法,直接采用c语言的“/”运算符,结果为整数)。

输入输出样例样例输入+ 5 2样例输出7题7:Anagrams问题Anagrams指的是具有如下特性的两个单词:在这两个单词当中,每一个英文字母(不区分大小写)所出现的次数都是相同的。

例如,“Unclear”和“Nuclear”、“Rimon”和“MinOR”都是Anagrams。

编写一个程序,输入两个单词,然后判断一下,这两个单词是否是Anagrams。

每一个单词的长度不会超过80个字符,而且是大小写无关的。

输入格式:输入有两行,分别为两个单词。

输出格式:输出只有一个字母Y或N,分别表示Yes和No。

输入输出样例样例输入UnclearNuclear样例输出Y题8:出现次数最多的整数编写一个程序,读入一组整数,这组整数是按照从小到大的顺序排列的,它们的个数N也是由用户输入的,最多不会超过20。

然后程序将对这个数组进行统计,把出现次数最多的那个数组元素值打印出来。

如果有两个元素值出现的次数相同,即并列第一,那么只打印比较小的那个值。

输入格式:第一行是一个整数N,N £ 20;接下来有N行,每一行表示一个整数,并且按照从小到大的顺序排列。

输出格式:输出只有一行,即出现次数最多的那个元素值。

输入输出样例样例输入5100150150200250样例输出150题9:字串统计给定一个长度为n的字符串S,还有一个数字L,统计长度大于等于L的出现次数最多的子串(不同的出现可以相交),如果有多个,输出最长的,如果仍然有多个,输出第一次出现最早的。

输入格式第一行一个数字L。

第二行是字符串S。

L大于0,且不超过S的长度。

输出格式一行,题目要求的字符串。

输入样例1:4bbaabbaaaaa输出样例1:bbaa输入样例2:2bbaabbaaaaa输出样例2:aa数据规模和约定n<=60S中所有字符都是小写英文字母。

提示枚举所有可能的子串,统计出现次数,找出符合条件的那个题10:矩阵乘法输入两个矩阵,分别是m*s,s*n大小。

输出两个矩阵相乘的结果。

输入格式第一行,空格隔开的三个正整数m,s,n(均不超过200)。

接下来m行,每行s个空格隔开的整数,表示矩阵A(i,j)。

接下来s行,每行n个空格隔开的整数,表示矩阵B(i,j)。

输出格式m行,每行n个空格隔开的整数,输出相乘後的矩阵C(i,j)的值。

样例输入2 3 21 0 -11 1 -30 31 23 1样例输出-3 2-8 2提示矩阵C应该是m行n列,其中C(i,j)等于矩阵A第i行行向量与矩阵B第j列列向量的内积。

例如样例中C(1,1)=(1,0,-1)*(0,1,3) = 1 * 0 +0*1+(-1)*3=-3题11:大小写转换编写一个程序,输入一个字符串(长度不超过20),然后把这个字符串内的每一个字符进行大小写变换,即将大写字母变成小写,小写字母变成大写,然后把这个新的字符串输出。

输入格式:输入一个字符串,而且这个字符串当中只包含英文字母,不包含其他类型的字符,也没有空格。

输出格式:输出经过转换后的字符串。

输入输出样例样例输入AeDb样例输出aEdB题14:算法训练最小乘积(基本型)给两组数,各n个。

请调整每组数的排列顺序,使得两组数据相同下标元素对应相乘,然后相加的和最小。

要求程序输出这个最小值。

例如两组数分别为:1 3 -5和-2 4 1那么对应乘积取和的最小值应为:(-5) * 4 + 3 * (-2) + 1 * 1 = -25输入格式第一个行一个数T表示数据组数。

后面每组数据,先读入一个n,接下来两行每行n个数,每个数的绝对值小于等于1000。

n<=8,T<=1000输出格式一个数表示答案。

样例输入样例输出题15:算法训练Torry的困惑(基本型)Torry从小喜爱数学。

一天,老师告诉他,像2、3、5、7……这样的数叫做质数。

Torry突然想到一个问题,前10、100、1000、10000……个质数的乘积是多少呢?他把这个问题告诉老师。

老师愣住了,一时回答不出来。

于是Torry求助于会编程的你,请你算出前n个质数的乘积。

不过,考虑到你才接触编程不久,Torry只要你算出这个数模上50000的值。

输入格式仅包含一个正整数n,其中n<=100000。

输出格式输出一行,即前n个质数的乘积模50000的值。

样例输入样例输出题16:算法训练寻找数组中最大值对于给定整数数组a[],寻找其中最大值,并返回下标。

输入格式整数数组a[],数组元素个数小于1等于100。

输出数据分作两行:第一行只有一个数,表示数组元素个数;第二行为数组的各个元素。

输出格式输出最大值,及其下标样例输入样例输出题17:算法训练关联矩阵有一个n个结点m条边的有向图,请输出他的关联矩阵。

输入格式第一行两个整数n、m,表示图中结点和边的数目。

n<=100,m<=1000。

接下来m行,每行两个整数a、b,表示图中有(a,b)边。

注意图中可能含有重边,但不会有自环。

输出格式输出该图的关联矩阵,注意请勿改变边和结点的顺序。

样例输入5 91 23 11 52 52 32 33 24 35 4样例输出1 -1 1 0 0 0 0 0 0-1 0 0 1 1 1 -1 0 00 1 0 0 -1 -1 1 -1 00 0 0 0 0 0 0 1 -10 0 -1 -1 0 0 0 0 1题18:算法训练送分啦这题想得分吗?想,请输出“yes”;不想,请输出“no”。

输出格式输出包括一行,为“yes”或“no”。

题19:算法训练操作格子有n个格子,从左到右放成一排,编号为1-n。

共有m次操作,有3种操作类型:1.修改一个格子的权值,2.求连续一段格子权值和,3.求连续一段格子的最大值。

对于每个2、3操作输出你所求出的结果。

输入格式第一行2个整数n,m。

接下来一行n个整数表示n个格子的初始权值。

接下来m行,每行3个整数p,x,y,p表示操作类型,p=1时表示修改格子x的权值为y,p=2时表示求区间[x,y]内格子权值和,p=3时表示求区间[x,y]内格子最大的权值。

输出格式有若干行,行数等于p=2或3的操作总数。

每行1个整数,对应了每个p=2或3操作的结果。

样例输入4 31 2 3 42 1 31 4 33 1 4样例输出63数据规模与约定对于20%的数据n <= 100,m <= 200。

对于50%的数据n <= 5000,m <= 5000。

对于100%的数据1 <= n <= 100000,m <= 100000,0 <= 格子权值 <= 10000。

题20:算法训练逆序对Alice是一个让人非常愉跃的人!他总是去学习一些他不懂的问题,然后再想出许多稀奇古怪的题目。

这几天,Alice又沉浸在逆序对的快乐当中,他已近学会了如何求逆序对对数,动态维护逆序对对数等等题目,他认为把这些题让你做简直是太没追求了,于是,经过一天的思考和完善,Alice 终于拿出了一道他认为差不多的题目:有一颗2n-1个节点的二叉树,它有恰好n个叶子节点,每个节点上写了一个整数。

相关文档
最新文档