2015
两点间距离
#include <stdio.h>
#include<math.h>
double x1,y11,z1,x2,y2,z2;
int main(void) {
scanf("%lf,%lf,%lf\n%lf,%lf,%lf",&x1,&y11,&z1,&x2,&y2,&z2);
double squ=(x1-x2)*(x1-x2)+(y11-y2)*(y11-y2)+(z1-z2)*(z1-z2);
double ans=sqrt((x1-x2)*(x1-x2)+(y11-y2)*(y11-y2)+(z1-z2)*(z1-z2));
printf("%.2lf\n",ans);
return 0;
}
选美比赛
#include <stdio.h>
/* C语言初始模板程序 */
int main(void) {
char c;int x,b;scanf("%c%d",&c,&x);
if(c=='M') b=x>100?1:0;
else b=x>80?1:0;
if(b) printf("Beauty\n");
else printf("Not beauty\n");
return 0;
}
正整数的约数数目
#include <stdio.h>
/* C语言初始模板程序 */
int main(void) {
int n,ans=0;scanf("%d",&n);
for(int i=1;i<=n;++i)
if(n%i==0) ++ans;
printf("%d\n",ans);
return 0;
}
级数求和
#include <stdio.h>
int main(void) {
double cnt=0;
int n,i=1;scanf("%d",&n);
while(cnt<=n)
{
cnt+=1.0/i++;
// printf("%.2lf\n",cnt);
}
printf("%d\n",i-1);
return 0;
}
这里注意精度,用1.0而不是1
正整数的最大公约数和最小公倍数
#include <stdio.h>
int n,a[100],gcd=1,lcm=1,maxx=1;
int main(void) {
scanf("%d",&n);
for(int i=1;i<=n;++i)
{
scanf("%d",&a[i]);
maxx*=a[i];
}
for(int i=1;i<=a[1];++i)
{
int b=0;
for(int j=1;j<=n;++j)
if(a[j]%i)
{
b=1;break;
}
if(b==0) gcd=i;
}
for(int i=a[n];i<=maxx;++i)
{
int b=0;
for(int j=1;j<=n;++j)
{
if(i%a[j])
{
b=1;break;
}
}
if(b==0)
{
lcm=i;
break;
}
}
printf("%d %d\n",gcd,lcm);
return 0;
}
直接枚举并判断即可
颜值测试
#include <stdio.h>
int a[200][200],b[200][200];
int main(void) {
int n,m;scanf("%d%d",&n,&m);
for(int i=1;i<=n;++i)
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)
scanf("%d",&b[i][j]);
for(int i=1;i<=n;++i,printf("\n"))
for(int j=1;j<=m;++j)
if(j==m)
printf("%d",a[i][j]-b[i][j]);
else
printf("%d ",a[i][j]-b[i][j]);
return 0;
}
IBM编码
#include <stdio.h>
#include<string.h>
char a[100];
int main(void) {
int n;scanf("%d\n",&n);
while(n--)
{
gets(a);int l=strlen(a);
for(int i=0;i<l;++i)
{
if((a[i]>='A'&&a[i]<='Z')||(a[i]>='a'&&a[i]<='z'))
{
a[i]++;
if(a[i]=='Z'+1||a[i]=='z'+1)
a[i]-=26;
}
}
puts(a);
}
return 0;
}
表示大整数
#include <stdio.h>
#include <string.h>
int n,k;
char a[100][100];
int main(void) {
scanf("%d\n",&n);
while(n--)
{
scanf("%s",a[n]);int l=strlen(a[n]);
scanf(" %d\n",&k);
if(a[0]=='-') printf("-");
for(int i=0;i<l;++i)
{
if(a[i]=='-') continue;
if((l-i-1)%k==0&&a[n][i]!='-'&&i!=l-1)
printf("%c,",a[n][i]);
else printf("%c",a[n][i]);
}
printf("\n");
}
return 0;
}
注意负数要往前移一个
医院排号
#include <stdio.h>
int t,n,k;
int a[2000],b[2000];
int main(void) {
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&k);
for(int i=1;i<=n;++i) {scanf("%d",&a[i]);b[i]=i;}
for(int i=1;i<n;++i)
for(int j=i+1;j<=n;++j)
if(a[i]<a[j]||(a[i]==a[j]&&b[i]>b[j]))
{
int tmp=a[i];a[i]=a[j];a[j]=tmp;
tmp=b[i];b[i]=b[j];b[j]=tmp;
}
k=k<n?k:n;printf("%d\n",k);
for(int i=1;i<=k;++i)
if(i==k)
printf("%d",b[i]);
else printf("%d ",b[i]);
printf("\n");
}
return 0;
}
铺地板
#include <stdio.h>
#include <string.h>
int a[200][200];
int n;
int f(int x)
{
return x<1||x>n;
}
int main(void) {
scanf("%d",&n);
int x1=-1,y1=1,x=1,y=1;
for(int i=1;i<=n*n;++i)
{
a[x][y]=i;
if(f(x+x1)&&f(y+y1))
{
if(x+x1==0) {x++;x1=-x1;y1=-y1;}
if(y+y1==0) {y++;x1=-x1;y1=-y1;}
}
else if(f(x+x1)) {y++;x1=-x1;y1=-y1;}
else if(f(y+y1)) {x++;x1=-x1;y1=-y1;}
else {x+=x1;y+=y1;}
}
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j)
if(j!=n) printf("%d ",a[i][j]);
else printf("%d\n",a[i][j]);
return 0;
}
找规律填数即可,这里f函数是算某个坐标是否出界的。
注意前半个三角形和后面半个中间规律可能发生了变化,判断一下即可。
整数删除若干数字后的最小数
#include <stdio.h>
#include <string.h>
char a[200],q[200];
int k,m,cnt;
int main(void) {
scanf("%s",a);scanf("%d",&k);
int l=strlen(a),l1=0,l2=l-k;
q[0]=a[0];
for(int i=1;i<l;++i)
{
// if(k==0) break;
if(cnt==-1) q[++cnt]=a[i];
else if(q[cnt]>a[i]&&k!=0)
{
--k;--cnt;--i;
}
else
{
q[++cnt]=a[i];
}
}
while(q[l1]=='0') ++l1;
for(int i=l1;i<l2;++i) printf("%c",q[i]);
if(l1>=l2) printf("0\n");
return 0;
}
思路:删除两边的k个数就相当于留下中间的n-k个数,使中间连续n-k个数最小,可以用前缀和处理。
前缀和:设\(b[1]=a[1],b[i]=b[i-1]+a[i](i>=2)\)
(即\(b[i]=a[1]+a[2]+...+a[i]\))
那么a数组中间第i个到第i+m个的和就是\(b[i+m]-b[i-1]\)
这样就避免了一次一次计算的超时。
(连载中。。。。。。
标签:main,计概,200,int,scanf,杂烩,2014,include,void From: https://www.cnblogs.com/oierwyh/p/17903469.html