c语言网的简单题一点都不简单,记录令人抓狂的题目......
1431.分糖果
题目描述
有n个小朋友围坐成一圈。老师给每个小朋友随机发偶数个糖果,然后进行下面的游戏:
每个小朋友都把自己的糖果分一半给左手边的孩子。一轮分糖后,拥有奇数颗糖的孩子由老师补给1个糖果,从而变成偶数。反复进行这个游戏,直到所有小朋友的糖果数都相同为止。
你的任务是预测在已知的初始糖果情形下,老师一共需要补发多少个糖果。输入
程序首先读入一个整数N(2< N< 100),表示小朋友的人数。 接着是一行用空格分开的N个偶数(每个偶数不大于1000,不小于2)
输出
要求程序输出一个整数,表示老师需要补发的糖果数。
样例输入
3 2 2 4样例输出
4
不明白为什么第一个for位置上写if(a[i]!=a[i+1]) 就死循环了,为嘛呀?????
我不李姐( ??)
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
int main()
{
cin.tie(0);
cout.tie(0);
ios::sync_with_stdio(false);
int n;
cin>>n;
int a[100100];
for(int i=1;i<=n;i++)
cin>>a[i];
int sum=0;
while(1)
{
bool flag=true;
for(int i=1;i<=n;i++)
if(a[1]!=a[i]) flag=false;
if(flag==true) break;
else
{
int t=a[1];
for(int i=1;i<=n;i++)
{
if(i==n) a[n]=a[n]/2+t/2;
else a[i]=a[i]/2+a[i+1]/2;
}
for(int i=1;i<=n;i++)
if(a[i]%2==1) { a[i]++; sum++; }
}
}
cout<<sum<<endl;
return 0;
}
1471.矩形面积交
题目描述
平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴。对于每个矩形,我们给出它的一对相对顶点的坐标,请你编程算出两个矩形的交的面积。
输入
输入仅包含两行,每行描述一个矩形。 在每行中,给出矩形的一对相对顶点的坐标,每个点的坐标都用两个绝对值不超过10^7的实数表示。
输出 输出仅包含一个实数,为交的面积,保留到小数后两位。
样例输入复制
1 1 3 3 2 2 4 4样例输出复制
1.00
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstring>
#include<string>
#include<cmath>
#include<algorithm>
using namespace std;
int main()
{
cin.tie(0);
cout.tie(0);
ios::sync_with_stdio(false);
double x1,x2,x3,x4,y1,y2,y3,y4;
cin>>x1>>y1>>x2>>y2;
cin>>x3>>y3>>x4>>y4;
double ax=max(min(x1,x2),min(x3,x4));
double ay=max(min(y1,y2),min(y3,y4));
double bx=min(max(x1,x2),max(x3,x4));
double by=min(max(y1,y2),max(y3,y4));
if(bx<=ax) cout<<"0.00"<<endl;
else printf("%.2lf\n",fabs(bx-ax)*fabs(by-ay));
return 0;
}
1482.Pascal三角
wa了一片 (被个杨辉三角的格式卡了两天,怒锤键盘) lqb会卡格式卡这么严格吗?
样例输入复制
3样例输出复制
1 1 1 1 2 1 1 3 3 1
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
int main()
{
cin.tie(0);
cout.tie(0);
ios::sync_with_stdio(false);
int n;
cin>>n;
int a[100][100];
for(int i=0;i<=n;i++)
{
a[i][0]=1;
}
a[1][1]=1;
for(int i=2;i<=n;i++)
for(int j=1;j<i;j++)
{
a[i][j]=a[i-1][j-1]+a[i-1][j];
a[i][i]=1;
}
int t=n;
for(int i=0;i<=n;i++)
{
for(int k=t--;k>0;k--)
printf(" ");
for(int j=0;j<=i;j++)
printf("%3d ",a[i][j]);
printf("\n");
}
return 0;
}
1434.回文数字
题目描述
本题要求你找到一些5位或6位的十进制数字。满足1.该数字的各个数位之和等于输入的整数,2.是回文数字
如果没有满足条件的,输出:-1样例输入复制
44样例输出复制
99899 499994 589985 598895 679976 688886 697796 769967 778877 787787 796697 859958 868868 877778 886688 895598 949949 958859 967769 976679 985589 994499
学到了一个很巧妙的写法欸!
#include<iostream>
#include<cmath>
#include<algorithm>
#include<cstdio>
using namespace std;
int main()
{
cin.tie(0);
cout.tie(0);
ios::sync_with_stdio(false);
int n;
cin>>n;
bool flag=false;
for(int i=10000;i<=999999;i++)//eg 12345
{
int t=i,num=0,sum=0;
while(t>0)
{
num=num*10+t%10;//倒序相乘 5 54 543 5432 54321
sum+=t%10;//从末位数字依次相加 5+4+3+2+1
t/=10;// 5 4 3 2 1
}
if(num==i&&sum==n)//如果是回文数字而且各个位数相加等于n
{
flag=true;
cout<<i<<endl;
}
}
if(flag==false) printf("-1\n");
return 0;
}
下午该把概率论第一章完结了 ,*★,°*:.☆( ̄▽ ̄)/$:*.°★* 。
晚上再接着补