您的位置:首页 > 编程语言 > C语言/C++

c/c++练习--02

2016-09-19 22:20 148 查看

c/c++练习–02

习题来源:C语言经典编程282例

11. 阳阳买水果

阳阳买苹果,每个苹果0.8元,阳阳第一天买两个苹果,第二天开始每天买前一天的两倍,直至购买的苹果个数总数不超过100个的最大值,求阳阳平均每天买多少钱。

#include <iostream>
using namespace std;

int main(void){
int sum=2, i=2, m=1;

while(sum<100) {
i *= 2;
sum += i;
m++;
}
cout<<"阳阳平均每天买:"<<sum*0.8/m<<endl;

return(0);
}


12. 任意次方后的最后三位

#include <iostream>
using namespace std;

int main(void){
int x,y,num=1;

cout<<"请输入两个整数:";
cin >>x>>y;
x %= 10000;
for (int i=0; i<y; i++){
num *= x;
num %=10000;
}
cout<<"x^y的后三位数为:"<<num<<endl;

return(0);
}


13. 计算某日是该年的第几天

#include <iostream>
using namespace std;

int main(void){
int LeapYear[12]={0,31,29,31,30,31,30,31,31,30,31,30};
int ComYear[12]={0,31,28,31,30,31,30,31,31,30,31,30};
int year,mon,day,sum=0;
cout<<"请输入年月日:";
cin>>year>>mon>>day;
if((year%4==0 && year%100!=0) || year%400==0){
for (int i=0;i<mon;i++)
sum += LeapYear[i];
}else{
for (int i=0;i<mon;i++)
sum += ComYear[i];
}
sum += day;
cout<<"这是一年的第" <<sum<<"天"<<endl;
return(0);
}


14. 婚礼上的谎言

3对情侣参加婚礼,3个新郎为A,B,C,3个新娘为X,Y,Z,有人想知道究竟谁与谁结婚,于是就问新人中的三位,得到如下结果:A说他将和X结婚;X说她的未婚夫是C;C说他将和Z结婚,这人事后知道他们在开玩笑,说的全是假话,那么究竟谁与谁结婚。

#include <iostream>

using namespace std;

int main(void){
int     i,j,k;

for(i=1;i<=3;i++){
for (j=1;j<=3;j++){
for (k=1;k<=3;k++){
if(i!=1 && k!=3 && k!=1 && i!=j && j!=k && k!=i){
printf("%c 将嫁给 A\n",'X'+i-1);
printf("%c 将嫁给 B\n",'X'+j-1);
printf("%c 将嫁给 C\n",'X'+k-1);
}
}
}
}
return(0);
}


15. 百元买百鸡

中国古代数学家张邱健在他的《算经》中提出了一个著名的问题,鸡翁一,值五钱,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问翁,母。雏各几何?

#include <iostream>

using namespace std;

int main(void){
for(int i=0;i<=20;i++){
for(int j=0;j<=33;j++){
if(i+j+(100-5*i-3*j)*3 == 100)
printf("翁:%d,母:%d,雏:%d\n",i,j,100-i-j);
}
}
return(0);
}


16. 打渔晒网

如果一个渔夫从2011年1月1日开始每三天打一次渔,两天晒一次网,求解输入2011年1月1日以后的任一天,输出该渔夫是在打渔还是在晒网。

#include <iostream>

using namespace std;

bool    LeapYear(int year){
if((year%4==0)&&(year%100!=0) || year%400)
return(true);
return(false);
}

int     num(int year,int month, int day){
int     LeapMonth[]={0,31,29,31,30,31,30,31,31,30,31,30};
int     Month[]={0,31,28,31,30,31,30,31,31,30,31,30};
int     sum=0;

if(LeapYear(year)){
for(int i=0;i<month;i++)
sum+= LeapMonth[i];
}else
for(int i=0;i<month;i++)
sum += Month[i];
sum+=day;
sum+= (year-2011)/4;
return(sum);
}

int main(void){
int     year,month,day;

cout<<"Please input date:"<<endl;
cin>>year>>month>>day;
if(num(year,month,day)%5<3)    cout<<"打渔"<<endl;
else cout<<"晒网"<<endl;

return(0);
}


17. 判断三角形的类型

根据输入的三角形三条边判断三角形类型,并输出类型及面积。

#include <iostream>
#include <cmath>
#define        CHANGE(a,b,c)    (a)=(b),(b)=(c),(c)=(a)
using namespace std;

void     max_num(int& a,int& b,int& c){
int     tmp;
if(a>b)CHANGE(tmp,a,b);
if(b>c)CHANGE(tmp,b,c);
if(a>c)CHANGE(tmp,a,c);
}

bool     IsTra(int a,int b,int c){
if(a<b+c && b<a+c && c <a+b) return(true);
return(false);
}

int main(void){
int     a,b,c,s;
float   area;

cout<<"请输入三条边长:"<<endl;
cin>>a>>b>>c;
if(IsTra(a,b,c)){
s=(a+b+c)/2;
area = sqrt((float)s*(s-a)*(s-b)*(s-c));
if(a*a+b*b<c*c)   cout<<"这是钝角三角形"<<endl;
if(a*a+b*b==c*c)   cout<<"这是直角三角形"<<endl;
if(a*a+b*b>c*c)   cout<<"这是锐角三角形"<<endl;
cout<<"面积为:"<<area<<endl;

}else   cout<<"这不是三角形"<<endl;

return(0);
}


18. 选择排序

#include <iostream>

using namespace std;

void    SelectSort(int a[],int size){
int key,tmp;

for(int i=0;i<size;i++){
key = i;
for (int j=i+1;j<size;j++){
if(a[key]>a[j])
key = j;
}
if(key !=i){
tmp=a[key];
a[key]=a[i];
a[i]=tmp;
}
}
}

int main(void){
int     a[]={5,4,3,2,1};

SelectSort(a,5);
for(int i=0;i<5;i++)
cout<<a[i]<<endl;
return(0);
}


19. 冒泡排序

#include <iostream>

using namespace std;

void    BubbleSort(int a[],int size){
int tmp;

for(int i=0;i<size;i++){
for (int j=i+1;j<size;j++){
if(a[j]<a[i])   {
tmp=a[j];
a[j]=a[i];
a[i]=tmp;
}
}
}
}

int main(void){
int     a[]={5,4,3,2,1};

BubbleSort(a,5);
for(int i=0;i<5;i++)
cout<<a[i]<<endl;
return(0);
}


20. 直接插入排序

#include <iostream>

using namespace std;

void   InseartSort(int a[],int size){
int tmp,j,flag=0;
for(int i=1;i<size;i++){
tmp = a[i];
for ( j=i-1;j>=0;j--){
if(a[j]<=tmp)break;
a[j+1] = a[j];
flag=1;
}
if(flag){
a[j+1]=tmp;
flag=0;
}
}
}

int main(void){
int     a[]={5,4,3,2,1};

InseartSort(a,5);
for(int i=0;i<5;i++)
cout<<a[i]<<endl;
return(0);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: