1,结构体
题目描述
有N个学生的数据,将学生数据按成绩由低到高排序,如果成绩相同则按姓名首字母序排序,如果首字母也相同则按照年龄排序,并输出N个学生排序后的信息。
#include<iostream> #include<string> #include<algorithm> using namespace std; struct stu { string name; int age; int score; }; bool cmp(stu a,stu b) { if(a.score!=b.score) { return a.score<b.score;//升序,也就是从小到大 } else { if(a.name!=b.name) { //如何表示按字母排序呢? //其实两个string比较就默认的是按字母顺序啦! return a.name<b.name; } else { return a.age<b.age; } } } int main() { int N; cin>>N; stu arr[1000]; for(int i=0;i<N;i++) { cin>>arr[i].name>>arr[i].age>>arr[i].score; } sort(arr,arr+N,cmp); for(int i=0;i<N;i++) { cout<<arr[i].name<<" "<<arr[i].age<<" "<<arr[i].score<<endl; } return 0; }2浮点数
题目描述
输入华氏温度F,将其按公式 C = 5/ 9 ( F–32 )转换为摄氏温度,并输出(结果保留一位小数)。
F不一定是整数,可能是浮点数
请尽量使用cin和cout完成输入输出
#include<iostream> #include<iomanip>//why,里面包含了 fixed 和 setprecision 等控制器 using namespace std; int main() { double F,C; cin>>F; //C=5/9*(F-32);这里 5/9 是两个整数相除,结果会被截断为整数 0,于是 C 永远为 0。 C=5.0/9.0*(F-32);//浮点数除法,简单说就是:当你希望除出来的结果带小数时,就必须用。 //只要参与运算的变量或常量中,至少有一个是浮点数,整条运算就会自动转为浮点数除法。 cout<<fixed<<setprecision(1)<<C<<endl; //whats fixed and setprecision //setprecision 控制的是有效数字位数;加上fixed控制的是小数点后的位数。 return 0; }3最大指针
题目描述
输入整数a、b、c,并定义最大指针
找出三个数的最大值,使用指针指向最大值并通过指针输出最大值
#include<iostream> #include<algorithm> using namespace std; int main() { int arr[3];//表示里面有三个数 for(int i=0;i<3;i++) { cin>>arr[i]; } sort(arr,arr+3);//arr+3意思为范围到arr+3之前,不包括这个数 int *p=&arr[2]; cout<<*p<<endl; return 0; }4选择
题目描述
如果一个数字不能被3整数,也不能被4整除,但能被7整除,就称为不三不四喜七之数。
给出数字N,统计1至N之间的满足条件的数值的数量
#include<iostream> using namespace std; int main() { int t;//变量在哪里“出生”,就只能在它出生的那对大括号 {} 里活着。 cin>>t; int arr[1000]; for(int i=0;i<t;i++) { int N; cin>>N; int sum=0; for(int j=1;j<N+1;j++) { if(j%3!=0&&j%4!=0&&j%7==0)//不能被3整除 且 不能被4整除 且 能被7整除 { sum=sum+1; } } arr[i]=sum; //i表示第几次测试,arr是存的每次测试的结果 } for(int i=0;i<t;i++) { cout<<arr[i]<<endl; } return 0; }5选择
题目描述
小六最喜欢的数字,当然是6了。当然,他也喜欢一切6的倍数,或者数位长度是6的倍数,或者末尾数字带6的数字。当给你一个数字,你能否告诉我,这是否是小六的幸运数呢?
输入
输入数据的第一行为测试数据的个数t(1 <= t <= 100),接下来有t行。每一行是一个数字n(1 <= n <= 10000000)
输出
对于每一组测试数据,如果是小六的幸运数字则输出“Yes”,否则输出“No”。每一组数据输出一行。
#include<iostream> using namespace std; int main() { int t; cin>>t; long long N[1000]; for(int i=0;i<t;i++) { cin>>N[i]; } for(int i=0;i<t;i++) { int len=0; long long tem=N[i];//为了得出长度又不影响N while(tem) //当tem化为0时得到长度潇洒退场 { tem=tem/10; len++; } if(N[i]%6==0) { cout<<"Yes"<<endl; } /*if(sizeof(N)==N%6) { cout<<"Yes"<<endl; }*/ //错的,sizeof是求内存 else if(len%6==0)//else 或 else if 必须紧跟在 if 或 else if 的语句块后面,中间不能插入任何其他语句 { cout<<"Yes"<<endl; } else if(N[i]%10==6)//如何表示数字末尾? { cout<<"Yes"<<endl; } else { cout<<"No"<<endl; } } return 0; }6选择
题目描述
企业发放的奖金根据利润提成。利润(为整数)低于或等于100000元的,奖金可提10%;
利润高于100000元,低于200000元(100000<I≤200000)时,低于100000元的部分按10%提成,高于100000元的部分,可提成 7.5%;
200000<I≤400000时,低于200000元部分仍按上述办法提成,(下同),高于200000元的部分按5%提成;
400000<I≤600000元时,高于400000元的部分按3%提成;600000<I≤1000000时,高于600000元的部分按1.5%提成;
I>1000000时,超过1000000元的部分按1%提成。从键盘输入当月利润I,求应发奖金总数。
输入
一个整数,当月利润。
输出
一个整数,奖金。
#include<iostream> using namespace std; int main() { int p,b;//p=profit,b=bonus cin>>p; if(p<=100000) { b=0.1*p; } else if(p>100000&&p<=200000) { b=10000+0.075*(p-100000);//100000*0.1=10000 } else if(p>200000&&p<=400000) { b=17500+(p-200000)*0.05;//0.075*100000=7500; } else if(p>400000&&p<=600000) { b=27500+(p-400000)*0.03;//200000*0.05=100000*0.1=10000 } else if(p>600000&&p<=1000000) { b=33500+(p-600000)*0.015;//200000*0.03=100000*0.06=6000; } else { b=39500+(p-1000000)*0.01;//400000*0.015=100000*0.06=6000; } cout<<b<<endl; return 0; }7字符串
题目描述
对候选人得票的统计程序。设有3个候选人,每个选民投票输入一个得票的候选人的名字,要求最后输出各人得票结果。
三个候选人的名字分别为Li, Zhang, Fu。
#include<iostream> #include<string> using namespace std; int main() { int t; string arr[1000]; cin>>t; for(int i=0;i<t;i++) { cin>>arr[i]; } //想遍历数组,选择语句如果满足条件则加一 int sum1=0; int sum2=0; int sum3=0; string li="Li"; string z="Zhang"; string f="Fu"; for(int i=0;i<t;i++) { if(arr[i]==li) { sum1=sum1+1; } else if(arr[i]==z) { sum2=sum2+1; } else if(arr[i]==f) { sum3=sum3+1; } } cout<<"Li:"<<sum1<<endl; cout<<"Zhang:"<<sum2<<endl; cout<<"Fu:"<<sum3<<endl; return 0; }8动态内存分配(二维数组)
定义:
当我们遇见大小不确定的数据时(比如动态数组和单链表),我们通过动态内存分配来向系统申请或释放内存,达到按需分配的效果。
语法:
1,分配内存:new,后面接一个内存大小,返回的是一个地址,所以需要用指针来接收;
int* p=new int; int* arr=new int[5];//分配5个int的数组2,释放内存
//单个数 delete p; delete[] arr;生命周期:全局;
动态分配内存就像租房子,
new是租,delete是退租。
题目描述
输入一个N*M的矩阵,要求将这个矩阵向左旋转90度后输出
比如现在有矩阵 :
1 2 3
4 5 6
向左旋转90度后的矩阵变为:
3 6
2 5
1 4
输入
第一行输入T表示有T个测试实例
第二行输入矩阵维度N和M,表示N行和M列
第三行起输入矩阵数据,矩阵数据用自然数表示
下面依次类推。
要求矩阵使用new动态分配和释放。
输出
输出左转90度的矩阵
注意每行最后一个数据不带空格,直接换行
#include<iostream> using namespace std; int main() { //1,输入测试数 int T; cin>>T; //2,输入行列数 while(T--) { int N,M; cin>>N>>M; //3,根据行列数建立二维数组(通过动态内存分配) int** a=new int*[N];//行 //每一行分配列,所以用循环 for(int i=0;i<N;i++) { a[i]=new int[M] ; } //4,输入这个二维数组,经典两个循环 for(int i=0;i<N;i++) { for(int j=0;j<M;j++) { cin>>a[i][j]; } } //5,直接输出左移的数组 int ver=0; for(int i=0;i<M;i++) { for(int j=0;j<N;j++) { ver=a[j][M-1-i]; cout<<ver; if(j!=N-1)//最后一个不带空格 { cout<<" "; } } cout<<endl;//每一行输出完记得换行 } //6,释放动态内存 //二维动态数组的内存是分两次申请、分散存放的 //所以必须先钻进每个信箱,把里面的小格子退掉(delete[] a[i];),最后再把空信箱退掉。 for(int i=0;i<N;i++) { delete[] a[i];//比如a[1],把a1里的所有数组删掉,故为delete[].记住,delete右边跟的是地址 } } return 0; }9进制转换
hex定义在头文件<iostream>中,它可以作用在输入流cin或输出流cout上,让流把接下来的整数当作十六进制来读或写。
用在输入时:告诉
cin,接下来的数字是十六进制形式的字符串,要按十六进制转换成整数存储,也就是十进制。用在输出时:告诉
cout,接下来输出的整数要转换成十六进制字符串打印。
int n; cin >> hex >> n; // 输入 "1A3F",n 就变成 6719 cout << n; // 输出 6719(十进制) int n = 6719; cout << hex << n; // 输出 "1a3f"(默认小写字母)| 操纵符 | 头文件 | 作用 | 示例(输入/输出) | 备注 |
|---|---|---|---|---|
dec | <iostream> | 设置为十进制(基数为10) | cin >> dec >> n;cout << dec << n; | 默认状态,即流刚创建时就使用十进制。 |
hex | <iostream> | 设置为十六进制(基数为16) | cin >> hex >> n;cout << hex << n; | 输出默认小写字母 a~f,配合uppercase可输出大写。 |
oct | <iostream> | 设置为八进制(基数为8) | cin >> oct >> n;cout << oct << n; | 输入时只允许数字 0~7,否则会出错。 |
题目描述
编写函数long change(char s[]),其作用是将参数表示的十六进制数转换为相应的十进制整数
#include<iostream> using namespace std; long change(char s[]) { int result=0; int b=0;//b为转换后的数值 //1,将字符转化为数值 for(int i=0;s[i]!='\0';i++)//字符的结尾为\0,用单引号 { char a=s[i]; if(a>='0'&&a<='9') { b=a-'0'; } else if(a>='A'&&a<='F') { b=a-'A'+10; } else if(a>='a'&&a<='f') { b=a-'a'+10; } //2,转十进制 result=result*16+b; } return result; } int main() { int t; cin>>t; while(t--) { char s[1000]; cin>>s; cout<<change(s)<<endl; } return 0; }