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右边跟的是地址 
	}
	delete[] a;
	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;
}

更多推荐