蓝桥杯 REPEAT程序

REPEAT程序(10分)

附件 prog.txt 中是一个用某种语言写的程序。

其中 REPEAT k 表示一个次数为 k 的循环。循环控制的范围由缩进表达,

从次行开始连续的缩进比该行多的(前面的空白更长的)为循环包含的内容。

例如如下片段:

REPEAT 2:
    A = A + 4
    REPEAT 5:
        REPEAT 6:
            A = A + 5
        A = A + 7
    A = A + 8
A = A + 9

该片段中从 A = A + 4 所在的行到 A = A + 8 所在的行都在第一行的

循环两次中。

REPEAT 6: 所在的行到 A = A + 7 所在的行都在 REPEAT 5: 循环中。

A = A + 5 实际总共的循环次数是 2 × 5 × 6 = 60 次。

请问该程序执行完毕之后,A 的值是多少?

------------

思路:

数字变化取决于循环次数和相加的数之积,分别用r[],a[]。

每获取一行输入,先判断他所在的循环层数,也就是判断前面的空格数

如果这行是repeat,那么本层数字为这一层循环的重复次数,因为是嵌套循环,要乘以上一层重复次数才是本层总共的重复次数

如果不是,那么本层数字为A的加数,a[now]+=加数

最后逐行a[i],r[i]相乘再相加得结果

#include <bits/stdc++.h>
#include <iostream>
#include <math.h>
#include <stdlib.h>
#include <cstring>
#include <stdio.h>
#include <queue>
#include <algorithm>
#include <vector>
#include <map>
#include <set>
#include <string>

#define MAX 110
#define INF 0x3f3f3f3f
#define EXP 1e-9
#define DEUBG 0
#define MOD 1000000007

using namespace std;

typedef long long ll;

int n,m,t,k;

int tonum(string s,int p){
	int r=0;
	while(s[p]>='0'&&s[p]<='9'&&p<s.length()){
		r=r*10+s[p]-'0';
		p++;
	}
	return r;
}

int getceng(string s){
	int i=0;
	for(;s[i]==' ';i++){
	}
	return i/4;
}

int findnum(string s){
	int i=0;
	for(;s[i]<'0'||s[i]>'9';i++){
	}
	return i;
}

int main(){
	string s;
	int a[MAX];
	memset(a,0,sizeof(a));
	int r[MAX];
	r[0]=1;
	int now=0;
	int mx=-1;
	while(getline(cin,s)){
		if(s[0]=='r')break;
		cout<<s<<"++"<<endl;
		now=getceng(s);
		t=s.find("REPEAT"); 
		if(now>mx)mx=now;
		if(t!=s.npos){
			r[now+1]=r[now]*tonum(s,t+7);
		}
		else {
			t=findnum(s);
			a[now]+=tonum(s,t);
			
//			printf("now:%d  %d  %c\n",now,tonum(s,t),s[t]);
		}
	}
	int ans=0;
	for(int i=0;i<=mx;i++){
//		printf("%d  %d\n",a[i],r[i]);
		ans+=a[i]*r[i];
	}
	printf("%d\n",ans);
	return 0;
}

 

### 蓝桥杯Scratch初级组历年真题概述 蓝桥杯大赛中的Scratch比赛分为多个级别,针对不同年龄段的学生设计了不同的题目难度。对于Scratch初级组而言,历年的真题涵盖了多种类型的编程挑战,旨在考察参赛者的逻辑思维能力和基础编程技能。 #### 2018年蓝桥杯Scratch初级组真题实例 在2018年的比赛中,有一道关于角色动画的题目,要求选手创建一个简单的动画场景,在该场景中,角色需要按照特定路径移动并执行相应动作[^1]。 ```python def move_character(character, path): """ 移动指定的角色沿着给定路径运动 参数: character (str): 角色名称 path (list of tuples): 路径坐标列表 [(x1,y1), (x2,y2)...] 返回: None """ for position in path: # 更新角色位置到下一个坐标点 set_position_of(character, *position) ``` #### 2019年蓝桥杯Scratch初级组真题实例 到了2019年,一道有趣的音乐创作类题目被引入进来。这道题目的核心在于让孩子们通过编写程序来控制虚拟乐器演奏一段旋律,从而激发他们对计算机科学的兴趣以及创造力的发展[^2]。 ```scratch when green flag clicked set instrument to [piano v] play note 60 for 1 beats rest for 0.5 beats repeat until <(note counter) > [7]> change tempo by (random number from -10 to 10) play drum (pick random 1 to 10) for (beat length) beats end stop all ``` #### 2020年蓝桥杯Scratch初级组真题实例 而在2020年度的比赛里,则出现了更多互动性强的任务,比如实现一个简易版打砖块游戏或是模拟交通信号灯的工作流程等项目。这些任务不仅考验着学生们的算法理解力,同时也促进了团队协作精神的成长.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值