算法小分队打卡---第一周

3.14     表达式括号匹配(P1739)

  • 思路:首先找到字符'('或者')',然后判断是'('还是')'?如果是前者,则继续下一步,否则将退出循环,输出"NO"。下一步的操作是,找到第一个')',让第一个'('和第一个')'相抵消,一直循环下去,如果最后找不到能和它抵消的,则跳出循环,输出"NO"。
  • 代码:
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
int main ()
{
    char c; 
    string str;
    cin>>str;
    int a,flag=0,m=0;
    a=str.length();
    for(int i=0;i<a;i++)
    {
        if(str[i]=='('||str[i]==')')
            {
                m=0;
                if(str[i]=='(')
                {
                for(int j=0;j<a;j++)
                    {
                    if(str[j]==')')
                        {
                        str[i]=str[j]='*';
                        m=111;
                        break; 
                        }
                    }
                if(m==0)
                    {
                    flag=1;
                    break;
                    }
                }
                else if(str[i]==')')
                {
                    flag=1;
                    break; 
                }
            }
    }
    if(flag==0)
        printf("YES");
    else
        printf("NO");
    return 0; 
}

3.15津津的储蓄计划(P1089)

  • 思路:可以先把预算存在一个数组中(当然也可以在输入的同时进行运算),当预算不够是即刻退出循环,否则将存入的钱累加,注意最后是把妈妈手里的钱乘1.2再加上最后剩下的钱。
  • 代码:
#include <iostream>
#include <string>
#include <cstdio>
using namespace std;
int chu=300,sheng01,sheng02,flag;
double sum;
int main ()
{
    int yu[15];
    for(int i=1;i<=12;i++)
    {
        scanf("%d",&yu[i]);            
    }                                       
    for(int i=1;i<=12;i++)
    {
        sheng01=sheng01+chu-yu[i];         
        if(sheng01<0)                  
            {                                  
                printf("%d",-1*i);           
                flag=2;
                break;
            }
        sheng02=sheng01/100;            
        sum=sum+sheng02*100;        
        sheng01=sheng01-sheng02*100;       
    }
    if(flag==0)
        printf("%.0lf",sum*1.2+sheng01);
    return 0;
}

3.16欢乐的跳(P1152)

  • 思路:先把相邻两数,差的绝对值存入一个数组中,然后循环再数组中找[1,n-1],这里可以定义一个flag,最后判断flag的值即可。
  • 代码:
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
int main ()
{
    int n,a[1005],b[1005],flag=0,j,m;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&a[i]);
    }
    for(j=1,m=1;m<n;m++,j++)
    {
        b[j]=abs(a[m]-a[m+1]);
    }
    for(int i=1;i<=(n-1);i++)
    {
        for(int k=1;k<=(j-1);k++)
        {
            if(i==b[k])
            {
                flag++;
                break;
            }
        }
    }
    if(flag==(n-1))
        printf("Jolly");
    else
        printf("Not jolly");
    return 0;
 } 

3.17开灯(P1161)

  • 思路:设计一个数组,让下标当灯的序号,以0做灭灯,以1做开灯,初始化为0,然后循环,是0置1,是1置0。最后从头开始循环,遇到1即可停下输出。
  • 代码:
#include<iostream>

using namespace std;

int a[2000001],n;

double x,y;

int main(){

 cin>>n;

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

  cin>>x>>y;

  for(double j=1;j<=y;++j){

   if(a[int(j*x)]==0) a[int(j*x)]=1;

   else a[int(j*x)]=0;

  }

 }

 for(int i=1;;i++){

  if(a[i]==1){

   cout<<i;

   break;

  }

 }

 return 0;

} 

3.18月落乌啼算钱(P1720)

  • 思路:把通项公式都给出了。
  • 代码核心:开方函数和幂函数。
  • 代码:
#include<iostream>

#include<iomanip>

#include <cmath>

#include <cstdio>

using namespace std;

int main ()

{

 int n;

 const double x=pow(5,0.5);

 double jie;

 scanf("%d",&n);

 jie=(pow((1+x)/2.0,n)-pow((1-x)/2.0,n))/x;

 printf("%.2lf",jie);

 } 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值