程序设计练习专栏
收集了普通练习题,面试笔试编程题,考研复试编程题,ACM比赛和平时练习题等,并且把它们进行难度分类以星星的数目来表示,每个题目都会给出相应的说明和源代码
aaronymhe
fighting
展开
-
括号匹配检测(难度:半颗星)
问题描述:输入一个字符串,字符串中只包含两种字符:’(‘和’)’,判断字符串的括号是否匹配,如果匹配输出YES,否则输出NO。例如: (())是匹配的 ()))是不匹配的参考代码:#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <string.h>#include <stack>std::stack<char>st;int原创 2017-06-03 18:13:07 · 13999 阅读 · 0 评论 -
可逆素数(难度:半颗星)
问题描述:可逆素数是指该数本身是一个素数,并且把该数倒过来也是一个素数。例如:1091是一个素数,把它倒过来1901也是一个素数,所以我们就说1091是一个可逆素数(同理1901也是一个可逆素数)输出所有范围在【1000,9999】并且各位数之和是11的整数倍的可逆素数。参考代码:#include <stdio.h>int IsPrime(int n){//判断n是否为质数,如果是返回1,否则返回原创 2017-06-03 16:00:53 · 19188 阅读 · 2 评论 -
求解同余方程组(难度:2颗星)
问题描述:有一个同余方程组,有N个同余方程组成(N由用户输入),另外每个同余方程的a[i]和m[i]也又用户指定,如下所示:x≡a[1](mod m[1]) x≡a[2](mod m[2]) x≡a[3](mod m[3]) x≡a[4](mod m[4]) … x≡a[n](mod m[n])求x的最小正整数解。问题分析:参考我的另外一篇文章“中国剩余定理” http://b原创 2017-06-02 22:43:09 · 14802 阅读 · 1 评论 -
求解二元一次方程(难度:2颗星)
问题描述:用户输入a,b,c三个整数,求解二元一次方程ax+by=c,如果(x,y)不存在整数解,则输出“No Solution”,否则输出一个整数解(x,y)使得x是最小正整数。解题思路:参考我的另外一篇文章“扩展欧几里得算法”http://blog.csdn.net/yi_ming_he/article/details/72819713参考代码:#include <stdio.h>typedef原创 2017-05-31 18:29:59 · 15235 阅读 · 0 评论 -
自守数(难度:半颗星)
问题描述:如果一个数n是一个自守数,它必须满足如下条件: 1. 如果n有k位数构成,那么n的平方的末尾k位数必须和n相等例如: 25是一个自守数,因为 25 * 25 = 625,并且25等于625后面两位25输出【1,10000】范围内的自守数。参考代码:#include <stdio.h>int main(){ int i, num, temp, factor; for原创 2017-05-30 18:56:49 · 13675 阅读 · 0 评论 -
亲密数对(难度:半颗星)
问题描述:输出【1,100000】范围内的错有亲密数对。如果说n和m是一个亲密数对,那么它们必须满足以下条件 1. n的全部因子之和(不包括n)必须等于m 2. m的全部因子之和(不包括m)必须等于n例如: 220的全部因子之和为: 1+2+4+5+10+11+20+22+44+55+110=284284的全部因子之和为: 1+2+4+71+142=220所以220和284是一对个亲密数对原创 2017-05-30 18:45:45 · 24467 阅读 · 4 评论 -
等差数列(难度:半颗星)
问题描述:一个等差数列的前4个数之和是26,前4个数之积是880,输出这个等差数列的前10项。问题分析:设等差数列的首项为i,公差为j,那么等差数列的和与积分别可以表示为: sum=4 * i + 6 * j product = i * (i + j ) * (i + 2 * j) * (i + 3 * j)参考代码:#include <stdio.h>#include <math.h>int原创 2017-05-30 18:19:23 · 11959 阅读 · 0 评论 -
一数三平方(难度:半颗星)
问题描述:在【100000,999999】范围内找出符合以下条件的数并输出: 1. 该数本身是一个平方数 2. 该数的前3位也是一个平方数 3. 该数的后3位也是一个平方数参考代码:#include <stdio.h>#include <math.h>int main(){ int i, num0, num1, num2; for (i = 100000; i < 99原创 2017-05-30 17:59:11 · 12047 阅读 · 0 评论 -
特殊完全平方数(难度:半颗星)
问题描述:在【100,10000】的范围内找出所以满足以下条件的数并输出 1. 这个数是一个完全平方数 2. 这个数中某个数字出现的次数大于1次参考代码:#include <stdio.h>#include <stdlib.h>#include <string.h>int main(){ int i, n, temp; int IsExist[10] = { 0 }, Is原创 2017-05-30 17:39:43 · 11920 阅读 · 0 评论 -
二进制转IP地址(难度:半颗星)
问题描述:任意数组32位的二进制数,转换成IP地址的形式输出。输入样例: 11111111000000001111111100000001输出样例: 255.0.255.1参考代码:#include <stdio.h>#include <stdlib.h>#include <time.h>int GetExponential(int a, int n)//求a的n次幂{ if (n原创 2017-05-30 17:23:44 · 11746 阅读 · 0 评论 -
分糖果问题(难度:1颗星)
问题描述:有n颗糖果,平均分给班上m个同学(m保证大于1),学生们按照任意顺序领取(反正大家数目都一样),第一个领取的是1颗加上剩余糖果数目的1/10,第二个领取的是2颗加上剩余数目的1/10,第三个领取的是3颗加上剩余数目的1/10,第四个领取的是4颗加上剩余数目的1/10,以此类推,求总共有多少糖果,班上有多少同学(如果有多个满足条件的答案,去n最小的那个)。问题分析:第一个同学取得的数目为:1原创 2017-05-30 16:54:37 · 12345 阅读 · 0 评论 -
生成连连看地图(难度:1颗星)
问题描述:输入m和n(保证m*n是偶数),生成一个m*n的二维矩阵,其中用数字1-5来表示不同的图案,需要满足每一个数字在矩阵中出现的次数为偶数,并且是随机的。问题分析:为了要保证每个数字都是随机的,肯定要用到srand函数为了要每个数字在矩阵中出现的次数是偶数,并且要控制进行的次数,最后是先产生矩阵个数的一半,然后另外一个复制前面一半的值,这样就可以保证偶数的条件在做完第二步之后,我们需要进原创 2017-05-30 14:29:40 · 12735 阅读 · 0 评论 -
尼克切斯定理(难度:2颗星)
问题描述:根据尼克切斯定理的描述,任何一个正整数N的立方都可以写成一串连续奇数的和,根据该定理,我们输入一个N(N的范围是【2,1000】),输出N的立方所有能够满足的等式(连续奇数序列的长度必须大于1才输出)。输入样例: 5输出样例: 5 * 5 * 5 = 125 = 21 + 23 + 25 + 27 + 29首先我们先分析一下这个问题: 1. 假设n 的立方等于cube,并且cube原创 2017-05-27 18:52:16 · 13822 阅读 · 1 评论 -
哥德巴赫猜想(难度:1颗星)
问题描述:哥德巴赫猜想的一种描述是,大于4的正偶数(我们假定1不是质数)都能分解成两个质数之和,我们假设这个猜想成立,我们现在输入一个大于4的正偶数N,输出所有能够满足哥德巴赫猜想的等式。(其中N的范围是【4,100000000】)输入样例: 100输出样例: 100 = 3 + 97 100 = 11 + 89 100 = 17 + 83 100 = 29 + 71 100 = 41原创 2017-05-27 18:09:18 · 11501 阅读 · 0 评论 -
输出三角形面积和类型(难度:半颗星)
问题描述:输入三条边的边长,如果这三条边可以构成三角形,输出三角形的面积(保留到小数点后6位)和类型,否则输出“不能构成三角形”PS:从上到下依次检测三角形的类型,只要有一个满足后面不用再检测了,直接输出即可:等边三角形 等腰三角形 直角三角形 普通三角形参考代码#include <stdio.h>#include <math.h>int main(){ double a, b,原创 2017-05-27 17:27:44 · 11265 阅读 · 0 评论 -
打渔晒网问题(难度:1颗星)
问题描述:如果1个渔夫从2011年1月1日开始每3天打一次渔,两天晒一次网,编程实现当输入2011年1月1日之后的任意1天,输出该渔夫是在打渔还是在晒网。输入样例 2011 5 5输出样例 晒网参考代码:#include <stdio.h>int arr[] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };int IsLeapYea原创 2017-05-27 15:56:23 · 11244 阅读 · 0 评论 -
这一天是星期几(难度:1颗星)
问题描述:输入1个日期,日期的格式由3个正整数组成(正整数之间用空格分开),输出这一天是星期几,如果日期不合法,比如:2008 1 32(这个就不合法,因为天数超过了1月的最大天数31),直接输出“输入日期无效”,否则输出这一天是星期几。输入举例:2017 1 1输出结果: 星期天参考代码:#include <stdio.h>int arr[] = { 0, 31, 28, 31, 30, 31,原创 2017-05-27 15:42:16 · 10738 阅读 · 0 评论 -
找出这个数(难度:半颗星)
求一个正整数,这个数满足如下条件: 1. 这个数的平方必须是四位数 2. 这个数的三次方必须是六位数 3. 而且这四位数和六位数每位数都不一样。参考代码:#include <stdio.h>int main(){ int i, j, GoNextLoop, flag[10], nCnt; for (i = 32; i < 100; i++)//在平方必须是四位数的范围内原创 2017-05-25 13:41:16 · 13148 阅读 · 0 评论 -
求a的b次幂的最后3位(难度:1颗星)
问题描述:输入a,b,其中a和b的范围是【2,999999999】,求出a的b次幂的最后3位。PS: 如果最后三位是001,那么输出1就可以了。问题分析:这个问题的实际上是求a的b次幂mod 1000的结果,把这个问题一般化,实际上是a的b次幂mod n的结果。(X*Y)%Z=((X%Z)*(Y%Z))%Z 根据蒙格马利快速幂模算法,我们可以方便求解,下面举个例子。2^7:2*2*2*2*2*2原创 2017-05-27 17:05:11 · 15908 阅读 · 0 评论 -
打印九九乘法表(难度:半颗星)
问题描述:打印小学课本的九九乘法表。参考代码:#include <stdio.h>int arr[100][100];int main(){ int i, j; for (i = 1; i <= 9; i++) { for (j = 1; j <= i; j++) { printf("%d*%d=%d ", i, j,原创 2017-05-24 23:36:23 · 13003 阅读 · 0 评论 -
杨辉三角(难度:半颗星)
输入杨辉三角的行数,并打印出来。例如,输入行数为5打印结果: 1 1 1 1 2 1 1 3 3 11 4 6 4 1参考代码:#include <stdio.h>int arr[100][100];int main(){ int n, i, j; printf("输入杨辉三角的行数:"); s原创 2017-05-24 23:33:35 · 13183 阅读 · 2 评论 -
输出正整数二进制的位置(难度:半颗星)
问题描述:输入一个正整数,输出这个正整数转换成二进制后的1的位置。例如: 输入:11 输出:1 2 4PS:11转成二进制位1011(从左到右,从1开始数)参考代码:#include <stdio.h>int main(){ int num, temp = 1, nCnt = 1; scanf_s("%d", &num); while (temp <= num)原创 2017-05-24 23:08:38 · 10564 阅读 · 1 评论 -
完全平方数(难度:半颗星)
问题描述:找出范围是【0, 1000000】并且满足下面条件的整数,条件1: 它加上100是一个完全平方数 它加上268也是一个完全平方数输出所有满足条件的数。参考代码:#include <stdio.h>#include <math.h>int main(){ int i, temp1, temp2; for (i = 1; i <= 1000000; i++) {原创 2017-05-14 22:38:42 · 926 阅读 · 0 评论 -
最大公约数和最小公倍数(难度:半颗星)
问题描述:输入两个正整数,输出两个正整数的最大公约数和最小公倍数。例如: 输入:30 50 输出: 最大公约数:10 最小公倍数:150思路1: 如果输入a,b,求出a,b总较小的那个赋值给c,在【c,1】这个范围内从大到小遍历,能同时被两个数整除即为最大公约数d,最小公倍数即为a*b/d。思路2: 利用辗转相除法,根据定理gcd(a, b) = gcd(b, a%b)方法1: 按照思原创 2017-05-15 00:10:45 · 10812 阅读 · 0 评论 -
分解质因数(难度:半颗星)
问题描述:输入一个正整数,输出它的质因数分解的结果。 PS:质因子从小到大排列例如: 输入:30 输出:30=2*3*5输入:5 输出:5=5参考代码:#include <stdio.h>int main(){ int i, n; printf("输入一个正整数n:"); scanf_s("%d", &n); printf("%d=", n); fo原创 2017-05-14 23:49:49 · 10859 阅读 · 1 评论 -
根据日期判断天数(难度:半颗星)
问题描述:输入一个日期,判断这一天是这一年的第几天,如果输入日期不合法,比如:2008 1 32(这个就不合法,因为天数超过了1月的最大天数31),直接输出“输入日期无效”输入样例: 2008 3 20输出 这是 2008 年的 第 80 天参考代码:#include <stdio.h>int arr[] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31原创 2017-05-14 23:25:31 · 10598 阅读 · 0 评论 -
计算两个日期的间隔天数(难度:1颗星)
问题描述:输入两个日期,日期的格式由3个正整数组成(正整数之间用空格分开),计算两个日期的差值(不管第一个输入的日期大还是第二个输入的日期大,始终用大的那个日期减去小的那个日期),如果两个日期中有一个不合法,比如:2008 1 32(这个就不合法,因为天数超过了1月的最大天数31),直接输出“输入日期无效”,否则输出两个日期的差值。输入举例:1999 1 21 2000 1 21那么输出的相隔的天原创 2017-05-14 23:12:36 · 10859 阅读 · 1 评论 -
叠数求和(难度:半颗星)
问题描述: 如果一个数的每个为的值都相同,我们成为叠数,求下面叠数的和。 求Sn = a + aa +aaa+ … +aa…a之值,其中a是一个数字,n表示a的位数。 例如:输入a=2,n=5 输出:24690 因为:2+22+222+2222+22222 = 24690参考代码:#include<stdio.h>#include<string.h>int main(){原创 2017-05-13 16:58:28 · 3896 阅读 · 1 评论 -
百钱买百鸡问题(难度:半颗星)
问题描述:一只公鸡5钱,一只母鸡3钱,3只小鸡1钱,百钱买百鸡(100钱必须花完,买到的鸡也必须是100只),输出所有的购买方案。例如: 0只公鸡,25只母鸡,75只小鸡是符合要求的, 因为 0 * 5 + 25 * 3 + 75 / 3 = 100 并且 0 + 25 + 75 = 100参考代码:#include <stdio.h>#include <string.h>int main()原创 2017-05-13 16:09:55 · 1610 阅读 · 1 评论 -
数据插入到有序数组(难度:半颗星)
问题描述:输入一个有序的整数序列(从小到大排列),然后再输入一个需要插入到数组中的整数,输出插入数据之前和之后的数列。(要保证插入数据之后数列仍然是从小到大排列)。例如: 输入数列: 1 2 4 5 待插入数据: 3插入数据后的数据: 1 2 3 4 5参考代码:#include <stdio.h>int arr[100];int main(){ char ch = ' ';原创 2017-05-13 15:48:51 · 2880 阅读 · 0 评论 -
输出满足各位数之和被23整除的数(难度:半颗星)
输出一个范围在【1,1000】并且各位数之和能被23整除的所有数。例如: 599 5 + 9 + 9 = 23,满足能被23整除的条件,所以应该输出。参考代码:#include <stdio.h>#include <string.h>int main(){ int i, temp, sum; for (i = 1; i <= 1000; i++) { t原创 2017-05-13 11:59:10 · 1937 阅读 · 1 评论 -
修改百位上的值(难度系数:半颗星)
输入一个大于100的整数,把原数的百位改成6,输出修改后的数(如果原来百位已经是6直接输出)。例如: 输入:123456 输出:123656方法1: 把数的百位取出,然后加上和6的差值乘以100就可以了参考代码:#include <stdio.h>int main(){ int n, temp; scanf_s("%d", &n); printf("修改前:\n");原创 2017-05-13 11:42:11 · 2447 阅读 · 0 评论 -
回文字符串(难度系数:半颗星)
输入一个字符串,判断其是否为回文。所谓回文字符串,是指从左到右读和从右到左读完全相同的字符串。如果是,输出YES,否则,输出NO输入样例: abcdcba输出样例: YES原创 2017-04-21 13:22:09 · 11420 阅读 · 0 评论 -
水仙花数(难度系数:半颗星)
题目描述:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。参考代码1:#include <stdio.h>int main(){ int i, j , k; for (i = 1; i <= 9; i++) for (j = 0; j <= 9;原创 2017-04-20 23:17:14 · 12049 阅读 · 1 评论 -
回文数(难度系数:半颗星)
输入一个数,判断它是不是回文数。例如12321是回文数,从左往右读和从右往左读是一样的。如果是回文数,输出YES,否则输出NO。原创 2017-04-20 23:37:50 · 11708 阅读 · 2 评论 -
计算π的值(难度系数:半颗星)
根据以下公式求π的值(要求精度0.0000000001,即某项小于0.0000000001时停止迭代)。输出结果精确到小数点后9位。参考代码:#include <stdio.h>#define eps 0.0000000001int main(){ double fenzi = 1; double fenmu = 3; double sum = 1; int nFe原创 2017-04-20 23:44:07 · 12240 阅读 · 1 评论 -
偶数的个数(难度系数:半颗星)
求出1~1000之间能被7或11整除,但不能同时被7和11整除的所有偶数(除了1和它本身以外不再有其他因数的正整数)#include<stdio.h>int IsDivideEnable(int nNum){ if ((nNum % 7 == 0 || nNum % 11 == 0) && (!(nNum % 7 == 0 && nNum % 11 == 0))) retu原创 2017-04-20 23:52:24 · 10964 阅读 · 1 评论 -
倒数之和(难度系数:半颗星)
计算并输出n(包括n)以内所有能被5或9整除的自然数的倒数之和。 (结果精确到小数点后6位) 例如,若从键盘给n输入20后,则输出为0.583333原创 2017-04-20 23:56:13 · 13128 阅读 · 0 评论 -
平方和立方(难度系数:半颗星)
问题描述:给定一段连续的整数,求出他们中所有偶数的平方和以及所有奇数的立方和。输入描述:输入数据包含多组测试实例,每组测试实例包含一行,由两个整数m和n组成。输出描述对于每组输入数据,输出一行,应包括两个整数x和y,分别表示该段连续的整数中所有偶数的平方和以及所有奇数的立方和。 你可以认为32位整数足以保存结果。输入样例1 3 2 5输出样例4 28 20 152原创 2017-04-21 00:13:30 · 10691 阅读 · 0 评论 -
完数(难度系数:半颗星)
题目描述:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如:6=1+2+3.编程找出1000以内的所有完数参考代码:#include <stdio.h>int main(){ int i, j , sum; for (i = 1; i <= 1000; i++) { sum = 0; for (j = 1; j < i; j ++)原创 2017-04-20 23:19:51 · 11698 阅读 · 1 评论