关于C++基础部分的学习

0.大写字母在前面,26

1.整行输入,以换行符为结束

char name[20];
cin.getline(name, 20);

要搞清楚int和char的区别,int用空格表示下一个,但是用cin来输入char时,用空格表示结束,如果要用换行来结束,使用cin.getline.

注意char用‘  ’

2.

//开平方
#include<cmath>
sqrt()

3.四舍五入:+0.5,取整

4.三目条件运算  ()?条件满足:不满足;

a= (a >= 'a'&& a <= 'z') ? (a + 'A' - 'a') : a;

5.整数规划问题:例如搬砖,找钱

遍历

#include<iostream>
using namespace std;
int main(){
	int n;//总人数
	cin>>n;
	int count=0;
//循环遍历 
	for(int i=0;i<=n/4;i++){
		for(int j=0;j<=n/3;j++){
			for(int k=0;k<=n;k++)
			if((i+j+k)==n&&(4*i+3*j+k/2)==n&&(k%2==0)){//注意满足约束条件要写全 
				cout<<i<<endl;
				cout<<j<<endl;
				cout<<k<<endl;
				count++;
			} 
		}
	}
	if(count==0){
		cout<<"no result!"<<endl;
		
	}
	return 0;
}

6.加密

(1)凯撒加密

#include<iostream>
using namespace std;
int main(){
	char a[20];
	cin>>a;
	int i=0;
	while(a[i]!='\0') {
		if(a[i]<='Z'&&a[i]>='A'){
			a[i]=(a[i]-'A'+3)%26+'a';
		}
		else{
			a[i]=(a[i]-'a'+3)%26+'A';
		}
		i++;
	}
	cout<<a<<endl;
	return 0;
}

(2)插入加密

#include<iostream>
using namespace std;
int main(){
	char a[30],b[5]={'a','b','c','d','e'};
	char c[60];
	int n;
	
	cin>>a;
	cin>>n;
	if(n>5|n<1){
		return 0;
	}
	int i=0;
	while(a[i]!='\0'){
		i++;
	}
	int N=i;//a[]总元素个数 
	int t=0;
	int j=0;
	int k;
	for(k=0;k<N/n;k++){//原字符串中的步长块
		for(j=k*n;j<(k+1)*n;j++){//每个块中的输出
		c[t]=a[j];	
		t++;
		}
		c[t]=b[k%5];//插入
		t++;
	}
	while(a[j]!='\0'){//剩余a
		c[t]=a[j];
		j++;
		t++;
	}
	if(N%n!=0){//以插入结尾
	 c[t]=b[(k)%5];	
	}
	cout<<c<<endl;
	return 0;
	
}

7.矩阵转置

#include<iostream>
using namespace std;
int main(){
	int n;
	cin>>n;
	int a[5][5];
	if(n<1|n>5){
		cout<<"matrix order error"<<endl;
		return 0;
	}
	for(int i=0;i<n;i++){
		for(int j=0;j<n;j++){
			cin>>a[i][j];
		}
	}
	int i=0;
	for(int j=0;j<n;j++){//把转置视为按列输出
		cout<<a[0][j];
		for(i=1;i<n;i++){
			cout<<" "<<a[i][j];
		}
		cout<<endl;
	}
	return 0;
		
}

8.冒泡排序

#include<iostream>
using namespace std;
int main(){
	struct list{
		char quming[50];
		char singer[20];
		int dianji;
	};
	list a[5];
	for(int i=0;i<5;i++){
		cin>>a[i].quming>>a[i].singer>>a[i].dianji;
	}
	for(int i=0;i<5;i++){
		for(int j=i+1;j<5;j++){
			if(a[i].dianji<a[j].dianji){
				list temp;
				temp=a[i];
				a[i]=a[j];
				a[j]=temp;
			}
		}
	}
	for(int i=0;i<5;i++){
		cout<<a[i].quming<<" "<<a[i].singer<<" "<<a[i].dianji<<endl;
	}
	return 0;
}

冒泡排序

for(int i=0;i<5;i++){
		for(int j=i+1;j<5;j++){
			if(a[i].dianji<a[j].dianji){//依次向后交换,大的放在前面
				list temp;
				temp=a[i];
				a[i]=a[j];
				a[j]=temp;
			}
		}
	}

9.顺序颠倒

#include<iostream>
using namespace std;
void mystrrev(char str[100]){
	int n=0;
	while(str[n]!='\0'){
		n++;
	}
	//n为元素个数
	char temp[100];
	int i=0;
	for(int j=n-1;j>=0;j--) {
		temp[i]=str[j];
		i++;
	}
	temp[i]='\0';///
	i=0;
	while(temp[i]!='\0'){
		cout<<temp[i];
		i++;
	}
	
}
int main(){
	char str[100];
	cin>>str;
	mystrrev(str);
	
	return 0;
	
}

还有一个指针版本,突然明白为啥要用指针了

#include<iostream>
using namespace std;
char *mystrrev(char *str){
	int n=0;
	while(str[n]!='\0'){
		n++;
	}
	//n为元素个数
	char *temp=new char[100];
	int i=0;
	for(int j=n-1;j>=0;j--) {
		temp[i]=str[j];
		i++;
	}
	return temp;
}
int main(){
	char *str=new char[100];
	cin>>str;
	
	cout<<mystrrev(str)<<endl;
	return 0;
	
}

这里直接返回temp,也就是这个数组的指针,而字符串是无法整个直接输出的,在输出时不用再单个输出。

10.判断复数

#include<iostream>
using namespace std;
int isprime(int a){
	if(a==1){return 0;
	}
	for(int i=2;i<=a-1;i++){
		if(a%i==0){
			return 0;
		}
	}
	return 1;
}
int main(){
	int a[50];
	int i=0;
	int t;
	cin>>a[i];
	while(a[i]!=0){//题目里0是结束符,
//刚开始没看题写了'\0',后来改成了'0',错误的,要区分清楚int和char 元素的区别
		i++;
		cin>>a[i];	
	}
	int n=i;
	int count=0;//这里用count来控制输出时的空格位置,最后一个元素后没有空格
//非常天才的count,哈哈哈哈哈!
	for(int i=0;i<n;i++){
		t=isprime(a[i]);
		if(t==1&&count==0){
			cout<<a[i];
			count++;
		}
		else if(t==1&&count>0){
			cout<<" "<<a[i];
		}
	}
	cout<<endl;
	return 0;
}

11.

#include<iostream>
using namespace std;
char *trans(char *str){
	char *temp=new char[200];
	int i=0;//相当于str指针变量
	int j=0;//temp的指针
	while(str[i]!='\0'){
		if(str[i]>='A'&&str[i]<='Z'){
			temp[j]=str[i];
			i++;
			j++;
		}
		else if(str[i]>='a'&&str[i]<='z'){
			temp[j]=(str[i]-'a')+'A';
			i++;
			j++;
		}
		else if(str[i]==' '){
			temp[j]=str[i];
			i++;
			j++;
		}
		else{//刚开始漏了这个条件,注意!
			i++;
		}
	}
	return temp;
}
int main(){
	char str[200];
	cin.getline(str,200);
	cout<<trans(str)<<endl;
	return 0;
}

12,计算语句单词个数,比较有意思的一道

主要是想清楚什么时候增加个数,这里的条件是——当该字符是字母,而下一个字符不是字母时,单词个数加一;非常天才的想法哈哈哈哈哈!

#include<iostream>
using namespace std;
int number(char *str){
	int i=0;
	int num=0;
	while(str[i]!='\0'){
		if(((str[i]>='A'&&str[i]<='Z')|(str[i]>='a'&&str[i]<='z'))&&(((str[i+1]<'A')|((str[i+1]>'Z')&&(str[i+1]<'a'))|str[i+1]>'z'))){
			i++;
			num++;
		}
		else{
			i++;
		}
	}
	return num;
}
int main(){
	char str[500];
	cin.getline(str,500);
	cout<<number(str)<<endl;
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值