仿懒人图库网站源码,仿淘宝网站源码 asp,江苏省备案网站,社交电商十大平台有哪些一、编程题
第1题#xff1a;求和
【题目描述】 输入一个正整数 N(N 100)#xff0c;输出 1 到 N(包含 1 和 N)之间所有奇数的和。 【输入描述】 输入一个正整数 N(N 100) 【输出描述】 输出 1 到 N 之间的所有奇数的和
【输入样例】
3【输出样例】
4答案求和
【题目描述】 输入一个正整数 N(N 100)输出 1 到 N(包含 1 和 N)之间所有奇数的和。 【输入描述】 输入一个正整数 N(N 100) 【输出描述】 输出 1 到 N 之间的所有奇数的和
【输入样例】
3【输出样例】
4答案 参考代码一
#include iostream
using namespace std;
int main() {int n;cin n;int sum 0;for (int i 1; i n; i) {if (i % 2 1) {sum i;}}cout sum endl;return 0;
}参考代码二
#include bits/stdc.h
using namespace std;
int n;
int main() {cin n;int sum 0;for (int i 1; i n; i 2)sum i;cout sum;return 0;
}本题属于简单题考察累加器和循环的使用。定义累加器 sum 并初始化为 0循环枚举i从1到 n判断i如果为奇数则累加 sumì。循环结束后输出 sum。对循环理解较好的同学也可以去掉 ǐ 判断将 i改为i 2直接累加也可达到奇数求和的效果。
第2题求平方
【题目描述】 平方是一种运算比如a 的平方表示 a × a。 例如2 的平方为 4(也就是 2*2 的积) 例如4 的平方为 16(也就是 4*4 的积) 输入一个正整数 N(N 30)输出 1 到 N(包含 1 和 N)之间所有正整数的平方且所输出的平方数之间以英文逗号隔开。 【输入描述】 输入一个正整数 N(N 30) 【输出描述】 输出所有正整数的平方数以英文逗号隔开
【输入样例】
3【输出样例】
1,4,9答案 参考代码一
#include iostream
using namespace std;
int main() {int n;cin n;for (int i 1; i n; i) {cout i * i;if (i ! n) {cout ,;}}return 0;
}参考代码二
#include bits/stdc.h
using namespace std;
int n;
int main() {cin n;cout 1;for (int i 2; i n; i)cout , i * i;return 0;
}本题属于简单题考察循环的使用。大部分失分的同学主要错在输出格式上。题目中要求输出时用英文逗号隔开不能加空格或者使用中文逗号并且最后一个平方数后面不能有英文逗号因此在循环输出时判断循环变量i如果不是输出最后一个数则输出英文逗号””否则不输出。
第3题数位递增数
【题目描述】 一个正整数如果任何一个数位小于等于右边相邻的数位则称为一个数位递增数。 例如 1135 是一个数位递增数 1024 不是一个数位递增数 输入一个正整数 n(11n10001)输出 11 到 n(包含11和n)中有多少个数位递增数。 例如输入 1511 到 15 之间的数位递增数有11、12、13、14、15。一共有 5 个。 【输入描述】 输入一个正整数 n(11n10001) 【输出描述】 输出 11 到 n 中有多少个数位递增数
【输入样例】
15【输出样例】
5答案 参考代码一
#include iostream
using namespace std;
int main() {int n;cin n;int cnt 0;for (int i 11; i n; i) {int a i / 10000 % 10; // 万位int b i / 1000 % 10; // 千位int c i / 100 % 10; // 百位int d i / 10 % 10; // 十位int e i % 10; // 个位if (a b b c c d d e) {cnt;}}cout cnt endl;return 0;
}参考代码二
#include bits/stdc.h
using namespace std;
int n;
int main() {cin n;int sum 0;for (int i 11; i n; i) {string s;stringstream ss;ss i;ss s;int f 0;for (int j 1; j s.size() - 1; j)if (s[j] s[j - 1]) {f 1;break;}if (!f)sum;}cout sum;return 0;
}本题与之前课上所做的水仙花数、四叶玫瑰数类似考察循环枚举与数位分离的技巧。 题目中的数据范围为 11~10001即最少为2位最多为5位。由题意可知一个数位递增数在高位补0后不会改变数的大小且仍为数位递增数。不妨在高位补 0将所有的数当做五位数处理。例如11、12 是数位递增数处理时看做 00011、00012仍为数位递增数。补齐五位后使用数位分离的技巧依次取出万位 a、千位 b、百位 c、十位 d、个位 e判断是否高位数字 低位数字如果是数位递增数则计数器 cnt循环结束后输出 cnt程序结束.
第4题最短距离
【题目描述】 有一个居民小区的楼房全是一样的并且按矩阵样式排列。其楼房的编号为 123……当排满一行时从下一行相邻的楼往反方向排号。 例如小区为 3 行 6 列矩阵排列方式
要求已知小区楼房有 w 列及两个楼房楼号 m 和 n求从 m 号楼到 n 号楼之间的最短路线经过几个楼(不能斜线方向移动)。 例如上图当 w6m8n2从 8 号楼到 2 号楼最短的路线经过 5432 四个楼(910112 也经过四个楼)故最短路线为 4(注不考虑路线只考虑最短路线经过几个楼)。 输入三个正整数 w(1w21)m(1m10001)n(1n10001)且 m 不等于n。三个正整数之间以一个空格隔开输出m 到n的最短路线经过几个楼。 【输入描述】 在一行输入三个正整数 wmn三个正整数之间以一个空格隔开 【输出描述】 输出 m 到 n 的最短路线经过几个楼 【输入样例】
6 8 2【输出样例】
4答案 参考代码一
#include cmath
#include iostreamusing namespace std;
int main() {int w, m, n;cin w m n;int x1, y1, x2, y2;x1 (m - 1) / w 1;y1 (m - 1) % w 1;if (x1 % 2 0) {y1 w 1 - y1;}x2 (n - 1) / w 1;y2 (n - 1) % w 1;if (x2 % 2 0) {y2 w 1 - y2;}int ans abs(x1 - x2) abs(y1 - y2);cout ans endl;return 0;
}参考代码二
#include bits/stdc.h
using namespace std;
int n, m, w, a[1011][1011], s1, t1, s2, t2;
int main() {cin w n m;int x 1, y 1, f 0;if (n m)swap(n, m);for (int i 1; i m; i) {a[x][y] i;if (i n)s1 x, t1 y;if (i m)s2 x, t2 y;if (f 0)y;elsey--;if (y w) {x;y w;f 1;}if (y 1) {x;y 1;f 0;}}cout abs(s2 - s1) abs(t2 - t1);return 0;
}本题重点考察题目分析和理解。我们需要计算出 m、n 号楼在第几行第几列行、列的差相加得到最终的结果。 例如w6m8,n2,可以算得8号楼所在行x1(m-1)/w1(8-1)1612,2号楼所在行x2(n-1)/w1(2-1)1611: 所在列的情况比较复杂涉及反向的问题其中奇数行的列号从左往右依次增大偶数行的列号从左往右依次减小我们可以先按照从左往右依次增大的情况算出y1(m-1)%w1(8-1)%612,y2(n-1)%w1(2-1)%612: 其中2号楼在奇数行y22即为所在列8号楼在偶数行方向相反y1w1-y161-258号楼在第5列。 经过的楼数为 abs(x1-x2)abs(y1-y2)abs(2-1) abs(5-2) 4. 将如上过程编写为程序输出即可。
第5题组合
【题目描述】 输入两个正整数 n 和 m(20 m n 0)n 代表正整数的个数要求 n 个正整数相加的和为 m输出满足这个条件的正整数组合有多少。 例如当 n4m8 时满足条件的有 5 组(也就是:5111842118331183221822228每组组合都由 4 个正整数组成且 4 个正整数的和等于 8) 【输入描述】 分行输入 n 和 m(20mn0) 【输出描述】 输出满足这个条件的正整数组合有多少 【输入样例】
4
8【输出样例】
5答案 参考代码一
#include iostream
using namespace std;
int n, m, sum 0, ans 0;
int a[25];
void dfs(int p) {if (p n) {if (sum m) {ans;}return;}for (int i a[p - 1]; i m - sum; i) {sum i;a[p] i;dfs(p 1);sum - i;a[p] 0;}
}
int main() {cin n m;a[0] 1;dfs(1);cout ans endl;return 0;
}参考代码二
#include bits/stdc.h
using namespace std;
int n, m, a[110], ans;
void dfs(int dps, int sum) {if (sum m)return;if (dps n) {if (sum m)ans;} else {for (int i 1; i m; i) {if (i a[dps - 1]) {a[dps] i;dfs(dps 1, sum i);a[dps] 0;}}}return;
}
int main() {cin n m;dfs(1, 0);cout ans;return 0;
}做法1使用递归回溯法设数组 a[25]a[p] 表示式子中的第 p 个加数。 设初始值 a[0] 1依次递归枚举 a[1]~ a[n]为了避免重复枚举a[p]的枚举范围为 a[p-1]~(m- sum)。 计算 a[1] ~ a[n] 总和 sum如果 sum m则个数 ans。 递归结束输出符合条件的个数 ans。