C++各类题目.docx
《C++各类题目.docx》由会员分享,可在线阅读,更多相关《C++各类题目.docx(12页珍藏版)》请在冰豆网上搜索。
C++各类题目
Description
定义一个结构体变量(包括年、月、日)。
编写一个函数days,由主函数将年、月、日传递给函数days,计算出该日在本年中是第几天并将结果传回主函数输出。
Input
年月日
Output
当年第几天
SampleInput
20001231
SampleOutput
366
#include
usingnamespacestd;
structy_m_d
{
intyear;
intmonth;
intday;
};
intdays(y_m_ddate)
{intday_sum;
switch(date.month)
{
case1:
day_sum=date.day;break;
case2:
day_sum=date.day+31;break;
case3:
day_sum=date.day+59;break;
case4:
day_sum=date.day+90;break;
case5:
day_sum=date.day+120;break;
case6:
day_sum=date.day+151;break;
case7:
day_sum=date.day+181;break;
case8:
day_sum=date.day+212;break;
case9:
day_sum=date.day+243;break;
case10:
day_sum=date.day+273;break;
case11:
day_sum=date.day+304;break;
case12:
day_sum=date.day+334;break;
}
if((((date.year%4==0&&date.year%100!
=0)||date.year%4==0))&&date.month>=3)
day_sum=day_sum+1;
return(day_sum);
}
intmain()
{
y_m_ddate;
intdays(y_m_d);
intday_sum;
cin>>date.year>>date.month>>date.day;
day_sum=days(date);
cout< return0;
}
Description
编写一个函数print,打印一个学生的成绩数组,该数组中有5个学生的数据,每个学生的数据包括num(学号)、name(姓名)、score[3](3门课的成绩)。
编写一个函数input,用来输入5个学生的数据。
Input
5个学生的学号,姓名,3门课的成绩
Output
5个学生的学号,姓名,3门课的成绩
SampleInput
1001zhangsan1009086
1002lisi902080
1003wangwu909089
1004yanping100100100
1005xiaoxiao606060
SampleOutput
1001zhangsan1009086
1002lisi902080
1003wangwu909089
1004yanping100100100
1005xiaoxiao606060
#include
usingnamespacestd;
structstudent
{
chara[6];//a代表学号
charb[8];//b代表名字
intc[4];//c代表成绩
}stu[5];
voidinput(studentstu[],intn)
{
inti,j;
for(i=0;i {cin>>stu[i].a>>stu[i].b;
for(j=0;j<3;j++)
{cin>>stu[i].c[j];
}
}
}
voidprint(studentstu[],intn)
{
inti,j;
for(i=0;i {cout< for(j=0;j<2;j++)
{cout< }
cout< cout<<'\n';
}
}
intmain()
{
constintn=5;
studentstu[n];
voidinput(student[],int);
voidprint(student[],int);
input(stu,n);
print(stu,n);
return0;
}
Description
(线性表)请写一个算法将顺序存储结构的线性表(a1...an)逆置为(an...a1)。
Input
输入长度n:
5
输入数据:
12345
Output
54 321
SampleInput
5
7891011
SampleOutput
1110987
HINT
逆置是数据结构中的题,类似数组中的逆置,即头尾互换。
这里大家可以先用逆序,即输出时倒序输出,以后再用逆置做。
#include
usingnamespacestd;
intmain()
{
intn,i,j,a[1000];
cin>>n;
for(i=1;i<=n;i++)
{
cin>>a[i];
}
for(j=n;j>=1;j--)
{cout< return0;
}
Description
(线性表)设有一个正整数序列组成的有序单链表(按递增次序有序,且允许有相等的整数存在),试编写能实现下列功能的算法:
(要求用最少的时间和最小的空间)
(1)确定在序列中比正整数x大的数有几个(相同的数只计算一次);
(2)在单链表将比正整数x小的数按递减次序排列;
Input
输入长度:
13
输入数据:
457781011151516172020
输入x:
10
Output
5
87754
SampleInput
7
1234566
4
SampleOutput
2
321
#include
#include
usingnamespacestd;
structstudent
{
intnum;
structstudent*next;
};
intn;
student*creatlink(inta)
{
inti;
student *head;
student*p1,*p2;
n=0;
p1=p2=newstudent;
cin>>p1->num;
head=NULL;
for(i=0;i {
n=n+1;
if(n==1)
head=p1;
else
p2->next=p1;
p2=p1;
if(i==a-1)
break;
p1=newstudent;
cin>>p1->num;
}
p2->next=NULL;
return(head);
}
intxunzhao(intx,student*head)
{
student*p1,*p2;
ints=0,m=0;
p1=head;
while(p1!
=NULL)
{
if(p1->num>x)
{
s=1;
p2=p1;
while(p1!
=NULL)
{
if(p1->num!
=p2->num)
s++;
p2=p1;
p1=p1->next;
}
}
else
{
if(p1->num!
=x)
m++;
p1=p1->next;
}
}
cout<
returnm;
}
voidprintlink(structstudent*head,intx,intm)
{
student*p;
inti,j;
p=head;
for(i=0;i {
for(j=i;j {
p=p->next;
}
cout<num<<"";
p=head;
}
}
intmain()
{
student*creatlink(inta);
voidprintlink(student*,int,int);
intxunzhao(intx,student*head);
student*head;
inta,b,c;
cin>>a;
head=creatlink(a);
cin>>b;
c=xunzhao(b,head);
printlink(head,b,c);
return0;
}
Description
(线性表)已知一单向链表,从第二个结点至表尾递增有序,(设a1试编写程序,将第一个结点删除并插入表中适当位置,使整个链表递增有序。
Input
输入长度n:
7
输入数据:
4123689
Output
1234689
SampleInput
5
1178910
SampleOutput
7891011
#include
usingnamespacestd;
intmain()
{
inti,n,j,a[20],t;
cin>>n;
for(i=1;i<=n;i++)
{
cin>>a[i];
}
for(j=1;j<=n-1;j++)
for(i=1;i<=n-j;i++)
if(a[i]>a[i+1])
{t=a[i];a[i]=a[i+1];a[i+1]=t;}
for(i=1;i<=n;i++)
{
cout< }
return0;
}