入门练习2

1

#include<stdio.h>

 int main()

 {

  int a,b,c;

  scanf("%d%d%d",&a,&b,&c);

  if(a>168&&b>168&&c>168)

  {

  printf("NO CRASH\n");

 }

 if(a<168)

 {

  printf("CRASH %d\n",a);

 }

 if(b<168&&a>168)

 {

  printf("CRASH %d\n",b);

     }

     if(b>168&&a>168&&c<168)

 {

  printf("CRASH %d\n",c);

     }

  return 0;

 }

2

要考虑全,等于号也要编译

#include<stdio.h>

 int main()

 {

  int n,i,a[80000],sum;

  while(scanf("%d",&n)!=EOF&&(n<100&&n>0))

  {

  a[0]=0;sum=0;

  for(i=1;i<=n;i++)

  {

       scanf("%d",&a[i]);

      }

      sum=(a[1]-a[0])*6+5;

      for(i=2;i<=n;i++)

      {

       if(a[i]>a[i-1])

       {

       sum+=(a[i]-a[i-1])*6+5;

}

if(a[i]<a[i-1])

{

sum+=(a[i-1]-a[i])*4+5;

}

if(a[i]==a[i-1])

{

sum+=5;

}

 }

 printf("%d\n",sum);

}

  return 0;

 }

3

#include<stdio.h>

 int main()

 {

  int N,n,i,j,l,t,a[88888];

  while(scanf("%d",&N)!=EOF)

  {

  for(l=0;l<N;l++)

  {

 scanf("%d",&n);

 for(i=0;i<n;i++)

 {

  scanf("%d",&a[i]);

  }

  for(i=1;i<n;i++)

  {

   for(j=0;j<i;j++)

   {

   if(a[i]<a[j])

   {

   t=a[i];a[i]=a[j];a[j]=t;

}

}

  }

  for(i=0;i<n-1;i++)

 {

  printf("%d ",a[i]);

  }

  printf("%d\n",a[n-1]);

 }

    }

  return 0;

 }

4

#include<stdio.h>

 int main()

 {

int i,j;

double x,sum;

printf("n e\n");

printf("- -----------\n");

  printf("0 1\n");

  printf("1 2\n");

  printf("2 2.5\n");

sum=2.5;x=0.5;

  for(i=3;i<=9;i++)

  {

  x*=1.00/i;sum+=x;

printf("%d %.9lf\n",i,sum);

 }

  return 0;

  }

5

给你n个数字,你需要找出出现至少(n+1)/2次的数字 现在需要你找出这个数字是多少?

#定义一个数组,下标为该数字,记录每个数字出现的次数,计算数组大小即可

#include<stdio.h>

 #include<string.h>

 #include<stdlib.h>

 int main()

 {

  int a[100000],i,n,x;

    while(scanf("%d",&n)!=EOF&&(n%2)!=0&&(1<=n)&&(n<=999999))

    {

     memset(a,0,sizeof(a));

     for(i=0;i<n;i++)

     {

     scanf("%d",&x);

     a[x]++;

        }

for(i=0;i<100000;i++)

{

if(a[i]>=(n+1)/2)

{

printf("%d\n",i);break;

}

}

   }

  return 0;

  }

 6

找规律

#include<stdio.h>

int main()

{

    int x,y,m,i;

    int g[8000];

while(scanf("%d%d%d",&x,&y,&m)!=EOF&&(x>=1&&(y<=1000&&y>0)&(m>=1&&m<=100000000)))

{

    g[1]=1;g[2]=1;

for(i=3;i<=48;i++)

{

g[i]=(x*g[i-1]+ y*g[i-2])%7;

    }

    printf("%d\n",g[m%48]);

}

    return 0;

 }

7

数据要开的足够大longlong注意输入lld

#include<stdio.h>

  long long f(long long x,long long y)

  {

   long long t,a,b;

   if(x<y)

   {

   t=x;x=y;y=t;

}

a=x,b=y;t=a%b;

while(t!=0)

{

x=y;y=t;t=x%y;

}

return a*b/y;

  }

  int main()

  {

   int n,N,i,j;

   long long x,a;

   scanf("%d",&N);

   for(j=0;j<N;j++)

{

    scanf("%d",&n);

   scanf("%d",&x);

for(i=1;i<n;i++)

{

scanf("%d",&a);

x=f(x,a);

}

printf("%d\n",x);

}

   return 0;

   }

8

给你一个正整数 Y 代表出生年份和一个 N,你的任务是告诉他从Y开始的第N个闰年。

#include<stdio.h>

int main()

{

int n,y,x,i,j,count,a[100000];

scanf("%d",&n);

for(i=0;i<n;i++)

{

scanf("%d%d",&y,&x);

a[0]=y;count=0;

j=y;

while(count<x)

{

if((j%4==0&&j%100!=0)||(j%400==0))

{

count++;

}

j++;

}

printf("%d\n",j-1);

}

return 0;

}

9

HOHO,终于从Speakless手上赢走了所有的糖果,是Gardon吃糖果时有个特殊的癖好,就是不喜欢将一样的糖果放在一起吃,喜欢先吃一种,下一次吃另一种,这样;可是Gardon不知道是否存在一种吃糖果的顺序使得他能把所有糖果都吃完?请你写个程序帮忙计算一下。

#数学排序问题,只需要让最多的空隔大于剩余的总数即可

#include<stdio.h>

int main()

{

long long n,i,m,j,a,max,sum;

scanf("%lld",&n);

for(i=0;i<n;i++)

{

    sum=0;max=0;

scanf("%lld",&m);

for(j=0;j<m;j++)

{

scanf("%d",&a);

if(max<a)

{

max=a;

}

sum+=a;

}

if(max-1<=sum-max)

{

printf("Yes\n");

}

else

{

printf("No\n");

}

}

return 0;

}    

10

此人从出生到18岁生日所经过的天数

#分三种情况讨论,善于用函数,后面每年循环计算,为什么不能直接算???

#include<stdio.h>

int f(int n)

{

if((n%4==0&&n%100!=0)||(n%400==0))

{

return 1;

}

else

{

return 0;

}

}

int main()

{

int n,i,j,year,month,day,sum;

scanf("%d",&n);

for(i=0;i<n;i++)

{

scanf("%d-%d-%d",&year,&month,&day);

sum=365*18;

if(month==2&&day==29)

{

sum=-1;

}

if(month==1||(month==2&&day<29))

{

for(j=year;j<year+18;j++)

{

if(f(j))

{

sum++;

  }

   }

}

if(month>2)

{

for(j=year+1;j<year+19;j++)

{

if(f(j))

{

sum++;

}

    }

}

printf("%d\n",sum);

}

return 0;

}

11

#include<stdio.h>

double f(char c,double a,double b)

{

    switch(c)

    {

        case '+': return a+b;break;

        case '-': return a-b;break;

        case '*': return a*b;break;

        case '/': return a/b;

    }

}

int main()

{

int d,n,i;

scanf("%d",&n);

if(n>0&&n<1000)

{

for(i=0;i<n;i++)

{

d=0;

getchar();

    char c;

    c=getchar();

double a;

scanf("%lf",&a);

    double b;

    scanf("%lf",&b);

    if(f(c,a,b)==int(f(c,a,b)))

    {

     d=int(f(c,a,b));

    printf("%d\n",d);

    }

    else

{

     printf("%.2lf\n",f(c,a,b));

}

    }

    }

    return 0;

}

12

#能一起计算的就先定义变量,统一计算好代入

#include<stdio.h>

struct milks

{

   char  name[101];

   int   price;

   int   v;

   int day;

   double x;

};

int main()

{

int i,n,a,j,l;

double min;

struct milks m[10000];

#结构体中的不用再定义

scanf("%d",&n);

for(i=0;i<n;i++)

{

scanf("%d",&a);

if(a>=1&&a<=100)

{

l=0;min=10000;

for(j=0;j<a;j++)

{

scanf("%s%d%d",&m[j].name,&m[j].price,&m[j].v);

if(m[j].v<200)

{

continue;

}

            m[j].day=m[j].v/200;

            if(m[j].day>=6)

{

    m[j].day=5;

}

            m[j].x=1.0*m[j].price/m[j].day;

#1.0一定要乘到前面,或是带括号,不能先除再乘

if(min>m[j].x)

{

min=m[j].x;l=j;

}

if(min==m[j].x)

    {

    if(m[l].v<m[j].v)

    {

     min=m[j].x;l=j;

}

}

}

}

printf("%s\n",m[l].name);

    }

return 0;

}

13

输入的数字各位数相加直到等于个位数

#include<stdio.h>

  #include<stdlib.h>

  #include<string.h>

  int main()

  {

   int i,g,len,num;

   long long sum;

char a[80000];  

   while(gets(a)!=NULL&&a[0]!='0')

   {

   sum=0;len=strlen(a);

   for(i=0;i<len;i++)

   {

   sum+=a[i]-48;

    }

    num=sum;

    while(num/10>=1)

#直到和是个位数

    {

sum=num;num=0;

    while(sum>=1)

#各位数字相加

    {

    num+=sum%10;sum/=10;

    }

    }

    printf("%d\n",num);

}

   return 0;

  }

14

#include<stdio.h>

int main()

{

int i,n,a[1000000];

while(scanf("%d",&n)!=EOF)

{

a[0]=7;a[1]=11;

for(i=2;i<=n;i++)

{

a[i]=a[i-1]%3+a[i-2]%3;

}

if(a[n]%3==0)

{

printf("yes\n");

}

else

{

printf("no\n");

}

 }

return 0;

}

14*#include<stdio.h>    

    int main()  

    {  

      long long n;  

        while(scanf("%d",&n)!=EOF)  

        {  

            if(n % 4 == 2)  

                 printf("yes\n");  

            else  

                printf("no\n") ;

        }  

      return 0;  

}  

15

我们是用后导字符5来判断是否打开一个新容器(不管后面有数没有)特殊的:当算完最后一个数之后,如果没有后导5的话,就直接t++;最终t的大小比容器的最大编号大1,!前导字符5直接通过if语句直接跳过(解决);相连的字符5用flag标志解决;前导0用int型变量解决!

#include <stdio.h>  

#include <string.h>  

#include <algorithm>  

using namespace std;

int main()  

{  

char a[10000];  

    int b[10000],i,j,x,len;  

    while(scanf("%s",a)!=EOF)  

   {  

     memset(b,0,sizeof(b));   

       j=0;x=0;len=strlen(a);  

       for(i=0;i<len;i++)  

           {  

           if(a[i]!='5')

            {  

                b[j]=b[j]*10+a[i]-'0';

#*10开辟新的一位,a[j]-’0’字符型转换为数组  

                    x=1;

                }  

                else if(x==1)  

                {

                 j++;x=0;

                }

#x用于统计5的个数,重复的5不进行运算

             if(a[i]!='5'&&a[i+1]=='\0')

                {

                 j++;

}

            }  

            sort(b,b+j);

            for(i=0;i<j-1;i++)  

            {  

                printf("%d ",b[i]);  

            }  

            printf("%d\n",b[j-1]);  

        }  

        return 0;  

    }  

15*

#include<cstdio>

#include<cstring>

#include<algorithm>

using namespace std;

int main()

{

    char s[5005];

    int a[5005];

    int i,len,k,n;

    while(scanf("%s",s)!=EOF)

    {

        n=0;

        k=0;

        len=strlen(s);

        s[len]='5';   

        i=0;

        while(s[i++]=='5');  //跳过前缀5,防止多输出0

        for(i--;i<=len;++i)

        {

            if(i>0&&s[i]=='5'&&s[i-1]=='5') //忽略连续的5,防止多输出0

                continue;

            if(s[i]!='5')

                k=k*10+s[i]-'0';

            else            //遇到5就增加一个数

            {

                a[n++]=k;

                k=0;

            }

        }

        sort(a,a+n);

        printf("%d",a[0]);

        for(i=1;i<n;++i)

            printf(" %d",a[i]);

        printf("\n");

    }

    return 0;

}

猜你喜欢

转载自blog.csdn.net/haohaoxuexilmy/article/details/81116374