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);
}