威廉网站建设,赣州营销网站建设,枣庄网站制作费用,网站建设方案书内容总言 主要内容#xff1a;一些习题。 文章目录 总言一、选择1、for循环、操作符#xff08;逗号表达式#xff09;2、格式化输出#xff08;转换说明符#xff09;3、for循环、操作符#xff08;逗号表达式、赋值和判等#xff09;4、if语句、操作符#xff…
总言 主要内容一些习题。 文章目录 总言一、选择1、for循环、操作符逗号表达式2、格式化输出转换说明符3、for循环、操作符逗号表达式、赋值和判等4、if语句、操作符自增自减、判等5、表达式求值类型转换6、二维数组数组初始化7、位操作符按位或与非8、位移操作符、位操作符9、运算符优先级10、 指针概念理解 二、编程2.1、组队竞赛2.1.1、题目2.1.2、题解贪心 2.2、删除公共字符2.2.1、题目2.2.2、题解一直接遍历查找删除2.2.3、题解二借助哈希 Fin、共勉。 一、选择
1、for循环、操作符逗号表达式 以下for循环的执行次数是
for (int x 0, y 0; (y 123) (x 4); x);A 是无限循环
B 循环次数不定
C 4次
D 3次相关知识链接操作符详解
回答4次2、格式化输出转换说明符 以下程序的运行结果是
#include stdio.h
int main(void) {printf(%s , %5.3s\n, computer, computer);return 0;
}A computer , puter
B computer , com
C computer , computer
D computer , compu.ter回答computer , com相关说明 3、for循环、操作符逗号表达式、赋值和判等 下列main()函数执行后的结果为
int func() {int i, j, k 0;for (i 0, j -1; j 0; i, j) {k;}return k;
}
int main() {cout (func());return 0;
}A -1
B 0
C 1
D 2相关链接for循环表达式
回答ijk0;4、if语句、操作符自增自减、判等 下面程序输出是什么
#include stdio.h
int main()
{int a 1, b 2, c 3, d 0;if (a 1 b 2)if (b ! 2 || c-- ! 3)printf(%d,%d,%d\n, a, b, c);elseprintf(%d,%d,%d\n, a, b, c);elseprintf(%d,%d,%d\n, a, b, c);return 0;
}A 123
B 132
C 321
D 133考察 ①if语句中else匹配原则相关链接。 ②逻辑运算符中的短路现象相关链接。
回答a1 b3 c3(短路) d05、表达式求值类型转换 若有定义语句 int a10 ; double b3.14 ; 则表达式 Aab 值的类型是
A char
B int
C double
D float考察了隐式类型转换整型提升、算术转换相关链接
回答C以下为寻常算术转换自下向上转换
long double
double
float
unsigned long int
long int
unsigned int
int6、二维数组数组初始化 下述p[1][2]的值是
int p[][4] {{1}, {3, 2}, {4, 5, 6}, {0}};A 1
B 0
C 6
D 2考察了二维数组的创建与初始化相关链接。
回答0。四行四列行可以省略时花括号区分值不够时默认为0。7、位操作符按位或与非 选择表达式 11|10 的结果本题数值均为十进制
A 11
B 10
C 8
D 2相关链接。
回答11。8、位移操作符、位操作符 fun(21)运行结果是
int fun(int a) {a ^ (1 5) - 1;return a;
}A 10
B 5
C 3
D 8相关链接。
回答10。9、运算符优先级 如下述定义语句不能使变量 year 中的值增至 1010 的语句是
int year1009,*pyear;A *p1;
B (*p);
C (*p);
D *p;主要考察前置自增、后置自增、解引用操作符优先级相关链接。
回答D。10、 指针概念理解 下面关于指针的描述不正确的是
A 当使用free释放掉一个指针内容后,指针变量的值被置为NULL
B 32位系统下任何类型指针的长度都是4个字节
C 指针的数据类型声明的是指针实际指向内容的数据类型
D 野指针是指向未分配或者已经释放的内存地址A解释实际上使用 free() 函数释放一个指针所指向的内存时指针本身的值并不会被自动置为 NULL。free() 只负责释放内存而不会修改指针的值。 因此指针仍然会指向之前分配的内存地址但这个地址现在可能已经被操作系统用于其他目的所以访问这个地址可能会导致未定义行为比如程序崩溃。为了避免这种情况一种常见的做法是在调用 free() 之后手动将指针设置为 NULL。
二、编程
2.1、组队竞赛
2.1.1、题目 题源链接 牛牛举办了一次编程比赛参加比赛的有3*n个选手每个选手都有一个水平值a_i。现在要将这些选手进行组队一共组成n个队伍即每个队伍3人。牛牛发现队伍的水平值等于该队伍队员中第二高水平值。 例如: 一个队伍三个队员的水平值分别是3,3,3。那么队伍的水平值是3。 一个队伍三个队员的水平值分别是3,2,3。那么队伍的水平值是3。 一个队伍三个队员的水平值分别是1,5,2。那么队伍的水平值是2。 为了让比赛更有看点牛牛想安排队伍使所有队伍的水平值总和最大。如样例所示 如果牛牛把6个队员划分到两个队伍 如果方案为team1:{1,2,5}、team2:{5,5,8}这时候水平值总和为7。 而如果方案为team1:{2,5,8}, team2:{1,5,5}, 这时候水平值总和为10。 没有比总和为10更大的方案所以输出10。 2.1.2、题解贪心 说明 ①既然涉及到取较大值先将输入的数据排序处理②其次让每次选值尽量取当前最大两值由于最大的数不可能是中位数所以退而求其次取每组中第二大的③这样最终获取到的所有组中的水平值总和最大。
举例
1 2 3 4 5 6 7 8 9组1 1 8 9 --8;
组2 2 6 7 --6;
组3 3 4 5 --4;
中位数和8、6、4.当前最大下标关系arr[arr.length-2*(i1)]
arr.length9;
i0时arr[7]8;
i1时arr[5]6;
i2时arr[3]4;
i根据n值而定。#include iostream
#include vector
#include algorithm
using namespace std;int main() {//1、输入数据long long n;//n个队伍while (cin n) //OJ题可能存在多组测试用例{ vectorint arr(3 * n);//3*n个选手for (int i 0; i 3 * n; i){cin arr[i];}//2、排序std::sort(arr.begin(), arr.end());//3、找每组水平值long long sum 0;//用于统计最后水平值总和。for (int i 0; i n; i) {sum arr[arr.size() - (2 * (i 1))];}cout sum endl;}return 0;
}2.2、删除公共字符
2.2.1、题目 题源链接
2.2.2、题解一直接遍历查找删除 说明 如下根据s2中给定查找的字符串遍历一遍s1将满足s2中的字符删除。时间复杂度为 O ( M ∗ N 2 ) O(M*N^2) O(M∗N2) [ 遍历s1(n)erase挪位删除(n)遍历s2(m)。] 其它 熟悉string类接口的使用。
#include iostream
#include string
using namespace std;int main()
{string s1, s2;getline(cin, s1);getline(cin, s2);int pos 0;for (size_t i 0; i s2.size(); i){while ((pos s1.find(s2[i])) ! string::npos){s1.erase(pos, 1);}}cout s1 endl;return 0;
}2.2.3、题解二借助哈希 说明字符串一共256个可以建立一个char类型的长度固定的数组来做哈希映射该数组用来统计s2字符串中出现的字母的个数。遍历s1与该哈希数组比较该数组中存在的值说明在s2中出现过。
#include iostream
#include string
using namespace std;int main()
{string s1,s2;getline(cin,s1);getline(cin,s2);string ret;int hash[256] {0};//使用哈希映射思想先统计s2中各字符出现的次数for(size_t i 0; i s2.size(); i){hash[s2[i]];}for(size_t i 0; i s1.size(); i){if(hash[s1[i]] 0)ret s1[i];}cout ret endl;return 0;
}Fin、共勉。