计概杂烩2020
2020计概
计算圆柱体的表面积
#include <stdio.h>
int main(void) {
double r,h;
scanf("%lf%lf",&r,&h);
printf("Area = %.3lf\n",3.14159*r*(r+h)*2);
return 0;
}
最近的食堂
#include <stdio.h>
#include <math.h>
int main(void) {
int n;scanf("%d",&n);
double a,b,c=100.0;
for(int i=1;i<=n;++i)
{
scanf("%lf%lf",&a,&b);
double tmp=sqrt(a*a+b*b);
if(c>tmp) c=tmp;
}
printf("%.2lf",c);
return 0;
}
斐波那契数列推广
#include <stdio.h>
/* C语言初始模板程序 */
int main(void) {
int a,b,f[20000],n;scanf("%d%d%d%d%d",&a,&b,&f[0],&f[1],&n);
for(int i=2;i<=n;++i)
f[i]=a*f[i-1]+b*f[i-2];
printf("%d\n",f[n]);
return 0;
}
自守数
#include <stdio.h>
int main(void) {
int n;scanf("%d\n",&n);int n1=n,l=1;
while(n1) {l*=10;n1/=10;}
if(n*n%l==n) printf("yes\n");
else printf("no\n");
return 0;
}
买口罩
#include <stdio.h>
int a[2000],b[2000];
int main(void) {
int n,m,ans=0;scanf("%d%d",&m,&n);
for(int i=1;i<=n;++i) scanf("%d%d",&a[i],&b[i]);
for(int i=1;i<n;++i)
for(int j=i+1;j<=n;++j)
if(a[i]>a[j])
{
int tmp=b[i];b[i]=b[j];b[j]=tmp;
tmp=a[i];a[i]=a[j];a[j]=tmp;
}
for(int i=1;i<=n;++i)
{
if(b[i]<m)
ans+=a[i]*b[i],m-=b[i];
else
{
ans+=m*a[i];
break;
}
}
printf("%d\n",ans);
return 0;
}
小迪游园记之找不同
#include <stdio.h>
void swap(char *x,char *y)
{
int tmp=*x;*x=*y;*y=tmp;
}
int main(void) {
char a[30],b[30];gets(a);gets(b);
for(int i=0;i<strlen(a);++i)
for(int j=i+1;j<strlen(a);++j)
if(a[i]>a[j])
swap(&a[i],&a[j]);
for(int i=0;i<strlen(b);++i)
for(int j=i+1;j<strlen(b);++j)
if(b[i]>b[j])
swap(&b[i],&b[j]);
for(int i=0;i<strlen(b);++i)
if(a[i]!=b[i])
{
printf("%c\n",b[i]);
break;
}
return 0;
}
跟之前的相似的名字那题一样,排序然后比较
编码字符串
#include <stdio.h>
#include <string.h>
#include <math.h>
char c[2000];
int cnt,m='a'-'A';
void print(char x)
{
if(x<='Z') x+=m;
printf("(%c,%d)",x,cnt+1);cnt=0;
}
int main(void) {
gets(c);int l=strlen(c);
for(int i=0;i<l;++i)
{
if(abs(c[i]-c[i+1])%m!=0)
print(c[i]);
else ++cnt;
}
return 0;
}
特殊的数
#include <stdio.h>
int f(int x)
{
int b=x%2;
while(x)
{
if(x%2!=b)
return 0;
x/=10;b=!b;
}
if(b) return 0;
return 1;
}
int main(void) {
int t;scanf("%d",&t);
while(t--){
int l,r,cnt=0;scanf("%d%d",&l,&r);
for(int i=l;i<=r;++i)
if(f(i))
++cnt;
printf("%d\n",cnt);
}
return 0;
}
卷怪竟在我身边
/*code from myy!!!orz*/
#include <stdio.h>
#include<math.h>
int kh[20000],kcxf[1000000];
int xks[20000],xh[20000],xf[20000];
double jd[20000],a;
int xkh[2000],fs[2000];
int main(void) {
int n,b;
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&kh[i]);
scanf("%d",&kcxf[kh[i]]);
}
int m;
scanf("%d",&m);
for(int i=0;i<m;i++){
scanf("%d%d",&xks[i],&xh[i]);
xf[i]=0;
jd[i]=0;
for(int j=0;j<xks[i];j++){
scanf("%d%d",&xkh[j],&fs[j]);
xf[i]+=kcxf[xkh[j]];
if(fs[j]>=60){
jd[i]+=(4.0-3.0*pow((10.0-fs[j]*1.0/10.0),2.5)/32.0)*kcxf[kh[i]];
}
}
jd[i]/=1.0*xf[i];
}
for(int i=0;i<m;i++){
for(int j=0;j<m-i-1;j++){
if(jd[j]<jd[j+1]){
a=jd[j];
jd[j]=jd[j+1];
jd[j+1]=a;
b=xh[j];
xh[j]=xh[j+1];
xh[j+1]=b;
}
if(jd[j]==jd[j+1]){
if(xh[j]>xh[j+1]){
b=xh[j];
xh[j]=xh[j+1];
xh[j+1]=b;
}
}
}
}
printf("%d",xh[0]);
for(int i=1;i<m;i++){
if(jd[i]==jd[0]){
printf(" %d",xh[i]);
}
}
return 0;
}
生命游戏
#include <stdio.h>
int a[200][200],b[200][200];
int fx[8]={1,1,1,-1,-1,-1,0,0};
int fy[8]={0,1,-1,-1,1,0,1,-1};
int f1(int x,int y)
{
int ret=0;
for(int i=0;i<8;++i)
{
int now=a[x+fx[i]][y+fy[i]];
if(now>1) continue;
ret+=now;
}
return ret;
}
int main(void) {
int n,m;scanf("%d%d",&n,&m);b[0][0]=b[n+1][0]=b[0][n+1]=b[n+1][n+1]=2;
for(int i=1;i<=n;++i,a[n+1][i]=a[0][i]=a[i][n+1]=a[i][0]=2)
for(int j=1;j<=m;++j)
scanf("%d",&a[i][j]);
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j)
{
b[i][j]=a[i][j];
if(a[i][j]&&f1(i,j)<2) b[i][j]=0;
else if(a[i][j]&&f1(i,j)<=3) b[i][j]=1;
else if(a[i][j]) b[i][j]=0;
else if(f1(i,j)==3) b[i][j]=1;
}
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j)
if(j==m) printf("%d\n",b[i][j]);
else printf("%d ",b[i][j]);
return 0;
}
模拟,注意一下细节,可以用函数来实现重复的功能
合理消费
#include <stdio.h>
int a[400],b[400],cnt;
int n,p,pd;
void print()
{
for(int i=1;i<cnt;++i) printf("%d ",b[i]);
printf("%d\n",b[cnt]);
pd=1;
}
void f(int p,int x)
{
if(a[x]>p) return;
p-=a[x];b[++cnt]=a[x];
if(p==0) {print();--cnt;return;}
for(int i=x;i<=n;++i)
{
f(p,i);
}
--cnt;
}
int main(void) {
scanf("%d%d",&n,&p);
for(int i=1;i<=n;++i)
scanf("%d",&a[i]);
for(int i=1;i<=n;++i) f(p,i);
if(pd==0) printf("NO\n");
return 0;
}
使用递归,每次决定当前的要不要(再)买一件,不能用,跟2017年最佳凑单的方法一差不多