1结构体题目描述有N个学生的数据将学生数据按成绩由低到高排序如果成绩相同则按姓名首字母序排序如果首字母也相同则按照年龄排序并输出N个学生排序后的信息。#includeiostream #includestring #includealgorithm using namespace std; struct stu { string name; int age; int score; }; bool cmp(stu a,stu b) { if(a.score!b.score) { return a.scoreb.score;//升序也就是从小到大 } else { if(a.name!b.name) { //如何表示按字母排序呢 //其实两个string比较就默认的是按字母顺序啦 return a.nameb.name; } else { return a.ageb.age; } } } int main() { int N; cinN; stu arr[1000]; for(int i0;iN;i) { cinarr[i].namearr[i].agearr[i].score; } sort(arr,arrN,cmp); for(int i0;iN;i) { coutarr[i].name arr[i].age arr[i].scoreendl; } return 0; }2浮点数题目描述输入华氏温度F将其按公式 C 5/ 9 ( F–32 )转换为摄氏温度并输出结果保留一位小数。F不一定是整数可能是浮点数请尽量使用cin和cout完成输入输出#includeiostream #includeiomanip//why,里面包含了 fixed 和 setprecision 等控制器 using namespace std; int main() { double F,C; cinF; //C5/9*(F-32);这里 5/9 是两个整数相除结果会被截断为整数 0于是 C 永远为 0。 C5.0/9.0*(F-32);//浮点数除法简单说就是当你希望除出来的结果带小数时就必须用。 //只要参与运算的变量或常量中至少有一个是浮点数整条运算就会自动转为浮点数除法。 coutfixedsetprecision(1)Cendl; //whats fixed and setprecision //setprecision 控制的是有效数字位数加上fixed控制的是小数点后的位数。 return 0; }3最大指针题目描述输入整数a、b、c并定义最大指针找出三个数的最大值使用指针指向最大值并通过指针输出最大值#includeiostream #includealgorithm using namespace std; int main() { int arr[3];//表示里面有三个数 for(int i0;i3;i) { cinarr[i]; } sort(arr,arr3);//arr3意思为范围到arr3之前不包括这个数 int *parr[2]; cout*pendl; return 0; }4选择题目描述如果一个数字不能被3整数也不能被4整除但能被7整除就称为不三不四喜七之数。给出数字N统计1至N之间的满足条件的数值的数量#includeiostream using namespace std; int main() { int t;//变量在哪里“出生”就只能在它出生的那对大括号 {} 里活着。 cint; int arr[1000]; for(int i0;it;i) { int N; cinN; int sum0; for(int j1;jN1;j) { if(j%3!0j%4!0j%70)//不能被3整除 且 不能被4整除 且 能被7整除 { sumsum1; } } arr[i]sum; //i表示第几次测试arr是存的每次测试的结果 } for(int i0;it;i) { coutarr[i]endl; } return 0; }5选择题目描述小六最喜欢的数字当然是6了。当然他也喜欢一切6的倍数或者数位长度是6的倍数或者末尾数字带6的数字。当给你一个数字你能否告诉我这是否是小六的幸运数呢输入输入数据的第一行为测试数据的个数t(1 t 100)接下来有t行。每一行是一个数字n(1 n 10000000输出对于每一组测试数据如果是小六的幸运数字则输出“Yes”否则输出“No”。每一组数据输出一行。#includeiostream using namespace std; int main() { int t; cint; long long N[1000]; for(int i0;it;i) { cinN[i]; } for(int i0;it;i) { int len0; long long temN[i];//为了得出长度又不影响N while(tem) //当tem化为0时得到长度潇洒退场 { temtem/10; len; } if(N[i]%60) { coutYesendl; } /*if(sizeof(N)N%6) { coutYesendl; }*/ //错的sizeof是求内存 else if(len%60)//else 或 else if 必须紧跟在 if 或 else if 的语句块后面中间不能插入任何其他语句 { coutYesendl; } else if(N[i]%106)//如何表示数字末尾 { coutYesendl; } else { coutNoendl; } } return 0; }6选择题目描述企业发放的奖金根据利润提成。利润为整数低于或等于100000元的奖金可提10%;利润高于100000元低于200000元100000I≤200000时低于100000元的部分按10提成高于100000元的部分可提成 7.5%;200000I≤400000时低于200000元部分仍按上述办法提成下同高于200000元的部分按5提成400000I≤600000元时高于400000元的部分按3提成600000I≤1000000时高于600000元的部分按1.5%提成I1000000时超过1000000元的部分按1%提成。从键盘输入当月利润I,求应发奖金总数。输入一个整数当月利润。输出一个整数奖金。#includeiostream using namespace std; int main() { int p,b;//pprofit,bbonus cinp; if(p100000) { b0.1*p; } else if(p100000p200000) { b100000.075*(p-100000);//100000*0.110000 } else if(p200000p400000) { b17500(p-200000)*0.05;//0.075*1000007500; } else if(p400000p600000) { b27500(p-400000)*0.03;//200000*0.05100000*0.110000 } else if(p600000p1000000) { b33500(p-600000)*0.015;//200000*0.03100000*0.066000; } else { b39500(p-1000000)*0.01;//400000*0.015100000*0.066000; } coutbendl; return 0; }7字符串题目描述对候选人得票的统计程序。设有3个候选人每个选民投票输入一个得票的候选人的名字要求最后输出各人得票结果。三个候选人的名字分别为Li Zhang Fu。#includeiostream #includestring using namespace std; int main() { int t; string arr[1000]; cint; for(int i0;it;i) { cinarr[i]; } //想遍历数组选择语句如果满足条件则加一 int sum10; int sum20; int sum30; string liLi; string zZhang; string fFu; for(int i0;it;i) { if(arr[i]li) { sum1sum11; } else if(arr[i]z) { sum2sum21; } else if(arr[i]f) { sum3sum31; } } coutLi:sum1endl; coutZhang:sum2endl; coutFu:sum3endl; return 0; }8动态内存分配二维数组定义当我们遇见大小不确定的数据时比如动态数组和单链表我们通过动态内存分配来向系统申请或释放内存达到按需分配的效果。语法1,分配内存new后面接一个内存大小返回的是一个地址所以需要用指针来接收int* pnew int; int* arrnew int[5];//分配5个int的数组2释放内存//单个数 delete p; delete[] arr;生命周期全局动态分配内存就像租房子new是租delete是退租。题目描述输入一个N*M的矩阵要求将这个矩阵向左旋转90度后输出比如现在有矩阵 1 2 34 5 6向左旋转90度后的矩阵变为3 62 51 4输入第一行输入T表示有T个测试实例第二行输入矩阵维度N和M表示N行和M列第三行起输入矩阵数据矩阵数据用自然数表示下面依次类推。要求矩阵使用new动态分配和释放。输出输出左转90度的矩阵注意每行最后一个数据不带空格直接换行#includeiostream using namespace std; int main() { //1输入测试数 int T; cinT; //2输入行列数 while(T--) { int N,M; cinNM; //3根据行列数建立二维数组通过动态内存分配 int** anew int*[N];//行 //每一行分配列所以用循环 for(int i0;iN;i) { a[i]new int[M] ; } //4,输入这个二维数组,经典两个循环 for(int i0;iN;i) { for(int j0;jM;j) { cina[i][j]; } } //5直接输出左移的数组 int ver0; for(int i0;iM;i) { for(int j0;jN;j) { vera[j][M-1-i]; coutver; if(j!N-1)//最后一个不带空格 { cout ; } } coutendl;//每一行输出完记得换行 } //6释放动态内存 //二维动态数组的内存是分两次申请、分散存放的 //所以必须先钻进每个信箱把里面的小格子退掉delete[] a[i];最后再把空信箱退掉。 for(int i0;iN;i) { delete[] a[i];//比如a[1]把a1里的所有数组删掉故为delete[].记住delete右边跟的是地址 } } return 0; }9进制转换hex定义在头文件iostream中它可以作用在输入流cin或输出流cout上让流把接下来的整数当作十六进制来读或写。用在输入时告诉cin接下来的数字是十六进制形式的字符串要按十六进制转换成整数存储也就是十进制。用在输出时告诉cout接下来输出的整数要转换成十六进制字符串打印。int n; cin hex n; // 输入 1A3Fn 就变成 6719 cout n; // 输出 6719十进制 int n 6719; cout hex n; // 输出 1a3f默认小写字母操纵符头文件作用示例输入/输出备注deciostream设置为十进制基数为10cin dec n;cout dec n;默认状态即流刚创建时就使用十进制。hexiostream设置为十六进制基数为16cin hex n;cout hex n;输出默认小写字母 a~f配合uppercase可输出大写。octiostream设置为八进制基数为8cin oct n;cout oct n;输入时只允许数字 0~7否则会出错。题目描述编写函数long change(char s[])其作用是将参数表示的十六进制数转换为相应的十进制整数#includeiostream using namespace std; long change(char s[]) { int result0; int b0;//b为转换后的数值 //1,将字符转化为数值 for(int i0;s[i]!\0;i)//字符的结尾为\0,用单引号 { char as[i]; if(a0a9) { ba-0; } else if(aAaF) { ba-A10; } else if(aaaf) { ba-a10; } //2转十进制 resultresult*16b; } return result; } int main() { int t; cint; while(t--) { char s[1000]; cins; coutchange(s)endl; } return 0; }
C++入门刷题记录~(动态内存分配)
发布时间:2026/5/28 3:51:42
1结构体题目描述有N个学生的数据将学生数据按成绩由低到高排序如果成绩相同则按姓名首字母序排序如果首字母也相同则按照年龄排序并输出N个学生排序后的信息。#includeiostream #includestring #includealgorithm using namespace std; struct stu { string name; int age; int score; }; bool cmp(stu a,stu b) { if(a.score!b.score) { return a.scoreb.score;//升序也就是从小到大 } else { if(a.name!b.name) { //如何表示按字母排序呢 //其实两个string比较就默认的是按字母顺序啦 return a.nameb.name; } else { return a.ageb.age; } } } int main() { int N; cinN; stu arr[1000]; for(int i0;iN;i) { cinarr[i].namearr[i].agearr[i].score; } sort(arr,arrN,cmp); for(int i0;iN;i) { coutarr[i].name arr[i].age arr[i].scoreendl; } return 0; }2浮点数题目描述输入华氏温度F将其按公式 C 5/ 9 ( F–32 )转换为摄氏温度并输出结果保留一位小数。F不一定是整数可能是浮点数请尽量使用cin和cout完成输入输出#includeiostream #includeiomanip//why,里面包含了 fixed 和 setprecision 等控制器 using namespace std; int main() { double F,C; cinF; //C5/9*(F-32);这里 5/9 是两个整数相除结果会被截断为整数 0于是 C 永远为 0。 C5.0/9.0*(F-32);//浮点数除法简单说就是当你希望除出来的结果带小数时就必须用。 //只要参与运算的变量或常量中至少有一个是浮点数整条运算就会自动转为浮点数除法。 coutfixedsetprecision(1)Cendl; //whats fixed and setprecision //setprecision 控制的是有效数字位数加上fixed控制的是小数点后的位数。 return 0; }3最大指针题目描述输入整数a、b、c并定义最大指针找出三个数的最大值使用指针指向最大值并通过指针输出最大值#includeiostream #includealgorithm using namespace std; int main() { int arr[3];//表示里面有三个数 for(int i0;i3;i) { cinarr[i]; } sort(arr,arr3);//arr3意思为范围到arr3之前不包括这个数 int *parr[2]; cout*pendl; return 0; }4选择题目描述如果一个数字不能被3整数也不能被4整除但能被7整除就称为不三不四喜七之数。给出数字N统计1至N之间的满足条件的数值的数量#includeiostream using namespace std; int main() { int t;//变量在哪里“出生”就只能在它出生的那对大括号 {} 里活着。 cint; int arr[1000]; for(int i0;it;i) { int N; cinN; int sum0; for(int j1;jN1;j) { if(j%3!0j%4!0j%70)//不能被3整除 且 不能被4整除 且 能被7整除 { sumsum1; } } arr[i]sum; //i表示第几次测试arr是存的每次测试的结果 } for(int i0;it;i) { coutarr[i]endl; } return 0; }5选择题目描述小六最喜欢的数字当然是6了。当然他也喜欢一切6的倍数或者数位长度是6的倍数或者末尾数字带6的数字。当给你一个数字你能否告诉我这是否是小六的幸运数呢输入输入数据的第一行为测试数据的个数t(1 t 100)接下来有t行。每一行是一个数字n(1 n 10000000输出对于每一组测试数据如果是小六的幸运数字则输出“Yes”否则输出“No”。每一组数据输出一行。#includeiostream using namespace std; int main() { int t; cint; long long N[1000]; for(int i0;it;i) { cinN[i]; } for(int i0;it;i) { int len0; long long temN[i];//为了得出长度又不影响N while(tem) //当tem化为0时得到长度潇洒退场 { temtem/10; len; } if(N[i]%60) { coutYesendl; } /*if(sizeof(N)N%6) { coutYesendl; }*/ //错的sizeof是求内存 else if(len%60)//else 或 else if 必须紧跟在 if 或 else if 的语句块后面中间不能插入任何其他语句 { coutYesendl; } else if(N[i]%106)//如何表示数字末尾 { coutYesendl; } else { coutNoendl; } } return 0; }6选择题目描述企业发放的奖金根据利润提成。利润为整数低于或等于100000元的奖金可提10%;利润高于100000元低于200000元100000I≤200000时低于100000元的部分按10提成高于100000元的部分可提成 7.5%;200000I≤400000时低于200000元部分仍按上述办法提成下同高于200000元的部分按5提成400000I≤600000元时高于400000元的部分按3提成600000I≤1000000时高于600000元的部分按1.5%提成I1000000时超过1000000元的部分按1%提成。从键盘输入当月利润I,求应发奖金总数。输入一个整数当月利润。输出一个整数奖金。#includeiostream using namespace std; int main() { int p,b;//pprofit,bbonus cinp; if(p100000) { b0.1*p; } else if(p100000p200000) { b100000.075*(p-100000);//100000*0.110000 } else if(p200000p400000) { b17500(p-200000)*0.05;//0.075*1000007500; } else if(p400000p600000) { b27500(p-400000)*0.03;//200000*0.05100000*0.110000 } else if(p600000p1000000) { b33500(p-600000)*0.015;//200000*0.03100000*0.066000; } else { b39500(p-1000000)*0.01;//400000*0.015100000*0.066000; } coutbendl; return 0; }7字符串题目描述对候选人得票的统计程序。设有3个候选人每个选民投票输入一个得票的候选人的名字要求最后输出各人得票结果。三个候选人的名字分别为Li Zhang Fu。#includeiostream #includestring using namespace std; int main() { int t; string arr[1000]; cint; for(int i0;it;i) { cinarr[i]; } //想遍历数组选择语句如果满足条件则加一 int sum10; int sum20; int sum30; string liLi; string zZhang; string fFu; for(int i0;it;i) { if(arr[i]li) { sum1sum11; } else if(arr[i]z) { sum2sum21; } else if(arr[i]f) { sum3sum31; } } coutLi:sum1endl; coutZhang:sum2endl; coutFu:sum3endl; return 0; }8动态内存分配二维数组定义当我们遇见大小不确定的数据时比如动态数组和单链表我们通过动态内存分配来向系统申请或释放内存达到按需分配的效果。语法1,分配内存new后面接一个内存大小返回的是一个地址所以需要用指针来接收int* pnew int; int* arrnew int[5];//分配5个int的数组2释放内存//单个数 delete p; delete[] arr;生命周期全局动态分配内存就像租房子new是租delete是退租。题目描述输入一个N*M的矩阵要求将这个矩阵向左旋转90度后输出比如现在有矩阵 1 2 34 5 6向左旋转90度后的矩阵变为3 62 51 4输入第一行输入T表示有T个测试实例第二行输入矩阵维度N和M表示N行和M列第三行起输入矩阵数据矩阵数据用自然数表示下面依次类推。要求矩阵使用new动态分配和释放。输出输出左转90度的矩阵注意每行最后一个数据不带空格直接换行#includeiostream using namespace std; int main() { //1输入测试数 int T; cinT; //2输入行列数 while(T--) { int N,M; cinNM; //3根据行列数建立二维数组通过动态内存分配 int** anew int*[N];//行 //每一行分配列所以用循环 for(int i0;iN;i) { a[i]new int[M] ; } //4,输入这个二维数组,经典两个循环 for(int i0;iN;i) { for(int j0;jM;j) { cina[i][j]; } } //5直接输出左移的数组 int ver0; for(int i0;iM;i) { for(int j0;jN;j) { vera[j][M-1-i]; coutver; if(j!N-1)//最后一个不带空格 { cout ; } } coutendl;//每一行输出完记得换行 } //6释放动态内存 //二维动态数组的内存是分两次申请、分散存放的 //所以必须先钻进每个信箱把里面的小格子退掉delete[] a[i];最后再把空信箱退掉。 for(int i0;iN;i) { delete[] a[i];//比如a[1]把a1里的所有数组删掉故为delete[].记住delete右边跟的是地址 } } return 0; }9进制转换hex定义在头文件iostream中它可以作用在输入流cin或输出流cout上让流把接下来的整数当作十六进制来读或写。用在输入时告诉cin接下来的数字是十六进制形式的字符串要按十六进制转换成整数存储也就是十进制。用在输出时告诉cout接下来输出的整数要转换成十六进制字符串打印。int n; cin hex n; // 输入 1A3Fn 就变成 6719 cout n; // 输出 6719十进制 int n 6719; cout hex n; // 输出 1a3f默认小写字母操纵符头文件作用示例输入/输出备注deciostream设置为十进制基数为10cin dec n;cout dec n;默认状态即流刚创建时就使用十进制。hexiostream设置为十六进制基数为16cin hex n;cout hex n;输出默认小写字母 a~f配合uppercase可输出大写。octiostream设置为八进制基数为8cin oct n;cout oct n;输入时只允许数字 0~7否则会出错。题目描述编写函数long change(char s[])其作用是将参数表示的十六进制数转换为相应的十进制整数#includeiostream using namespace std; long change(char s[]) { int result0; int b0;//b为转换后的数值 //1,将字符转化为数值 for(int i0;s[i]!\0;i)//字符的结尾为\0,用单引号 { char as[i]; if(a0a9) { ba-0; } else if(aAaF) { ba-A10; } else if(aaaf) { ba-a10; } //2转十进制 resultresult*16b; } return result; } int main() { int t; cint; while(t--) { char s[1000]; cins; coutchange(s)endl; } return 0; }