第一阶段:入门(20211123)
二、简单操作
2000 ASCII排序
#include<iostream>
#include<cstdio>
using namespace std;
int main(){
char a,b,c,temp;
while(cin>>a>>b>>c){
if(a>b){ //a<b
temp=b;
b=a;
a=temp;
}
if(a>c){ //a<c
temp=c;
c=a;
a=temp;
}
if(b>c){ //b<c
temp=c;
c=b;
b=temp;
}
cout<<a<<" "<<b<<" "<<c<<endl;
}
return 0;
}
获取数组长度
实验发现
但是用应该用int length=strlen(str);
(20211210改)
char str[1000];
gets(str);
//int length=sizeof(str)/sizeof(str[0]); //输出1000
int length=strlen(str);
冒泡排序
#include<iostream>
#include<cstdio>
using namespace std;
void BubbleSort(char a[]){
int length=sizeof(a)/sizeof(a[0])-1; //数组长度
int m=length-1; //注意这里,因为要使下面的i+1<m,所以长度要减1
int flag=1; //标记每轮是否有交换
while( (m>0) && flag){
flag=0;
for(int i=0;i<m;i++){
if(a[i]>a[i+1]){
char t;
t=a[i];a[i]=a[i+1];a[i+1]=t; //交换a[i]和a[i+1]
flag=1;
}
}
m--;
}
}
int main(){
char a[3],temp;
while(cin>>a[0]>>a[1]>>a[2]){
int n=sizeof(a)/sizeof(a[0]); //数组长度
BubbleSort(a);
cout<<a[0]<<" "<<a[1]<<" "<<a[2]<<endl;
}
return 0;
}
直接插入排序
#include<iostream>
#include<cstdio>
using namespace std;
void InsertSort(char a[],int length){
for(int i=2;i<length;i++){
if(a[i]<a[i-1]){ //后一个比前一个小,则依次与i-2,i-3...比较,直至找到比该值大的
//将a[i]放到a[0],然后将a[i-1]的值后移到a[i]
a[0]=a[i];
a[i]=a[i-1];
int j;
for(j=i-2;a[0]<a[j];--j){
a[j+1]=a[j];
}
a[j+1]=a[0];
}
}
}
int main(){
char a[4],temp;
while(cin>>a[1]>>a[2]>>a[3]){
int n=sizeof(a)/sizeof(a[0])-1; //数组长度
InsertSort(a,4);
cout<<a[1]<<" "<<a[2]<<" "<<a[3]<<endl;
}
return 0;
}
折半插入排序
#include<iostream>
#include<cstdio>
using namespace std;
void BInsertSort(char a[],int length){
//折半查找插入位置
int low,high,mid;
for(int i=2;i<length;i++){
a[0]=a[i];
low=1;
high=i-1;
while(low<=high){
mid=(low+high)/2;
if(a[0]<a[mid]) high=mid-1;
else low=mid+1;
}
for(int j=i-1;j>=high+1;--j){
a[j+1]=a[j];
}
a[high+1]=a[0];
}
}
int main(){
char a[4],temp;
while(cin>>a[1]>>a[2]>>a[3]){
int n=sizeof(a)/sizeof(a[0])-1; //数组长度
BInsertSort(a,4);
cout<<a[1]<<" "<<a[2]<<" "<<a[3]<<endl;
}
return 0;
}
快排
#include<iostream>
#include<string>
#include<cstring>
#include<cmath>
using namespace std;
int Paration(char a[],int low,int high){
a[0]=a[low];
char key=a[low];
while(low<high){
while(low<high && a[high]>=key) --high;
a[low]=a[high];
while(low<high && a[low]<=key) ++low;
a[high]=a[low];
}
a[low]=key;
return low;
}
void QuickSort(char a[],int low,int high){
if(low<high){
int privotloc=Paration(a,low,high);
QuickSort(a,low,privotloc-1);
QuickSort(a,privotloc+1,high);
}
}
int main(){
char a[4],temp;
while(cin>>a[1]>>a[2]>>a[3]){
int n=sizeof(a)/sizeof(a[0]); //数组长度
QuickSort(a,1,n-1);
cout<<a[1]<<" "<<a[2]<<" "<<a[3]<<endl;
}
return 0;
}
简单选择排序
#include<iostream>
#include<string>
#include<cstring>
#include<cmath>
using namespace std;
//简单选择排序
void SelectSort(char a[],int n){
for(int i=1;i<n;i++){
int k=i;
for(int j=i+1;j<=n;j++){
if(a[j]<a[k]) k=j; //和a[k]进行比较
}
if(k!=i){
int temp=a[k];
a[k]=a[i];
a[i]=temp;
}
}
}
int main(){
char a[4],temp;
while(cin>>a[1]>>a[2]>>a[3]){
int n=sizeof(a)/sizeof(a[0]); //数组长度
SelectSort(a,n-1);
cout<<a[1]<<" "<<a[2]<<" "<<a[3]<<endl;
}
return 0;
}
2001 计算两点间的距离
C输出小数点后2位
#include<iostream>
#include<cmath>
using namespace std;
int main(){
double x1,x2,y1,y2,d;
while(cin>>x1>>y1>>x2>>y2){
d=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
printf("%.2f\n",d);
}
return 0;
}
C++输出小数点后2位
#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;
int main(){
double x1,x2,y1,y2,d;
while(cin>>x1>>y1>>x2>>y2){
d=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
cout.setf(ios::fixed);
cout<<fixed<<setprecision(2)<<d<<endl;
}
return 0;
}
2002 计算球体积
#include<iostream>
#include<cmath>
#define PI 3.1415927
using namespace std;
int main(){
double r,V;
while(cin>>r){
V=PI*r*r*r*4/3;
printf("%.3f\n",V);
}
return 0;
}
?
2003 求绝对值
#include<iostream>
#include<cmath>
#define PI 3.1415927
using namespace std;
int main(){
double a,b;
while(cin>>a){
b=a>0?a:-a;
printf("%.2f\n",b);
}
return 0;
}
2004 成绩转换(switch)
#include<iostream>
#include<cmath>
using namespace std;
int main(){
int a;
while(cin>>a){
if(a<0 || a>100)
cout<<"Score is error!"<<endl;
else{
int b=a/10;
char grade;
switch(b){
case 10:
case 9:grade='A';break;
case 8:grade='B';break;
case 7:grade='C';break;
case 6:grade='D';break;
case 5:
case 4:
case 3:
case 2:
case 1:
case 0:grade='E';break;
}
cout<<grade<<endl;
}
}
return 0;
}
2005 第几天(!)
#include<iostream>
#include<string>
#include<cstring>
#include<cmath>
using namespace std;
bool IsRYear(int year){
if((year%4==0 && year%100!=0) || (year%400==0))
return true;
return false;
}
int main(){
string a;
int year,month,day;
int days[12]={31,28,31,30,31,30,31,31,30,31,30,31}; //假设不是闰年
while(cin>>a){
int m,n;
m=a.find_first_of('/');
n=a.find_last_of('/');
year=atoi(a.substr(0,m).c_str()); //string转int
month=atoi(a.substr(m+1,n).c_str());
day=atoi(a.substr(n+1).c_str());
if(IsRYear(year)){ //判断是否为闰年
days[1]=29;
}
else
days[1]=28;
int days_sum=day;
for(int i=2;i<=month;i++){
days_sum+=days[i-1-1];
}
cout<<days_sum<<endl;
}
return 0;
}
int转string
https://www.cnblogs.com/smile233/p/8379802.html
string转int
https://www.cnblogs.com/hhccdf/p/4334597.html
2006 求奇数的乘积
#include<iostream>
#include<string>
#include<cstring>
#include<cmath>
using namespace std;
int main(){
int n;
int *a;
while(cin>>n){
a=new int[n];
int m=1;
for(int i=0;i<n;i++){
cin>>a[i];
if(a[i]%2!=0){
m*=a[i];
}
}
cout<<m<<endl;
}
return 0;
}
动态数组
https://www.cnblogs.com/buanxu/p/12757291.html
//一维动态数组
int *p;
p=new int[2];/*创建了一个长度为n的动态数组,并且返回这个数组的首地址给p,p就指向了这个动态数组,可以通过指针p来操作数组,因为创建的动态数组并没有名字,只返回了首地址给p,所以可以把p看作是这个动态数组的名字 */
delete []p;
//二维动态数组
int **p; //2*3
p=new int*[2];
for(int i=0;i<2;i++){
p[i]=new int[3];
}
for(int i=0;i<2;i++){
delete []p[i];
}
delete []p;
不用动态数组
#include<iostream>
#include<string>
#include<cstring>
#include<cmath>
using namespace std;
int main(){
int n;
int a;
while(cin>>n){
int m=1;
for(int i=0;i<n;i++){
cin>>a;
if(a%2!=0){
m*=a;
}
}
cout<<m<<endl;
}
return 0;
}
2007 平方和与立方和
#include<iostream>
#include<string>
#include<cstring>
#include<cmath>
using namespace std;
int main(){
int n,m;
while(cin>>n>>m){
int a2=0,a3=0;
//题目没说n和m的大小关系
if(n>m){
int temp=n;
n=m;
m=temp;
}
for(int i=n;i<=m;i++){
if(i%2==0){
a2+=i*i;
}
else{
a3+=i*i*i;
}
}
cout<<a2<<" "<<a3<<endl;
}
return 0;
}
2008 数值统计
#include<iostream>
#include<string>
#include<cstring>
#include<cmath>
using namespace std;
int main(){
int n;
while(cin>>n){
if(n==0) break;
int a1=0,a2=0,a3=0;
double a;
for(int i=0;i<n;i++){
cin>>a;
if(a<0) a1++;
else if(a==0) a2++;
else a3++;
}
cout<<a1<<" "<<a2<<" "<<a3<<endl;
}
return 0;
}
2009 求数列的和
81+9+3+根号3
#include<iostream>
#include<string>
#include<cstring>
#include<cmath>
using namespace std;
int main(){
int n,m;
double temp;
while(scanf("%d %d",&n,&m)!=EOF){
double sum=n;
temp=n;
for(int i=0;i<m-1;i++){
temp=sqrt(temp);
sum+=temp;
}
printf("%.2f\n",sum);
}
return 0;
}
2010 水仙花数
#include<iostream>
#include<string>
#include<cstring>
#include<cmath>
using namespace std;
int main(){
int n,m;
int a1,a2,a3; //百位数,十位数,个位数
while(scanf("%d %d",&n,&m)!=EOF){
if(n>m){
int temp=n;
n=m;
m=temp;
}
int a[1000]; //100<=m<=n<=999
int j=0;
for(int i=n;i<=m;i++){
a1=i/100;
a2=(i-a1*100)/10;
a3=i%10;
if(a1*a1*a1+a2*a2*a2+a3*a3*a3==i){
a[j]=i;
j++;
}
}
if(j==0) printf("no\n");
else{
for(int i=0;i<j-1;i++)
printf("%d ",a[i]);
printf("%d\n",a[j-1]);
}
}
return 0;
}
2011 多项式求和
#include<iostream>
#include<string>
#include<cstring>
#include<cmath>
using namespace std;
int main(){
int n;
double sum;
while(scanf("%d",&n)!=EOF){
int *a=new int[n];
for(int i=0;i<n;i++){
cin>>a[i];
}
for(int i=0;i<n;i++){
sum=0;
for(int j=1;j<=a[i];j++){
if(j%2==0) sum-=1.0/j; //1.0
else sum+=1.0/j;
}
printf("%.2f\n",sum);
}
}
return 0;
}
2039 三角形
没有说边是整数。。。
#include<iostream>
#include<string>
#include<cstring>
#include<cmath>
using namespace std;
int main(){
int n;
double a,b,c; //没有说边是整数
cin>>n;
for(int i=0;i<n;i++){
cin>>a>>b>>c;
//if(a*a+b*b==c*c || a*a+c*c==b*b || b*b+c*c==a*a) //直角三角形
if(a+b>c && a+c>b && b+c>a) //任意两边大于第三边
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
system("pause");
return 0;
}