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;
}