PTA-不能使用循环是多么悲伤的一件事

下面是一个算到10的加法表:

0 + 0 = 0  0 + 1 = 1  0 + 2 = 2  0 + 3 = 3  0 + 4 = 4  0 + 5 = 5  0 + 6 = 6  0 + 7 = 7  0 + 8 = 8  0 + 9 = 9  0 +10 = 10  
1 + 0 = 1  1 + 1 = 2  1 + 2 = 3  1 + 3 = 4  1 + 4 = 5  1 + 5 = 6  1 + 6 = 7  1 + 7 = 8  1 + 8 = 9  1 + 9 = 10  
2 + 0 = 2  2 + 1 = 3  2 + 2 = 4  2 + 3 = 5  2 + 4 = 6  2 + 5 = 7  2 + 6 = 8  2 + 7 = 9  2 + 8 = 10  
3 + 0 = 3  3 + 1 = 4  3 + 2 = 5  3 + 3 = 6  3 + 4 = 7  3 + 5 = 8  3 + 6 = 9  3 + 7 = 10  
4 + 0 = 4  4 + 1 = 5  4 + 2 = 6  4 + 3 = 7  4 + 4 = 8  4 + 5 = 9  4 + 6 = 10  
5 + 0 = 5  5 + 1 = 6  5 + 2 = 7  5 + 3 = 8  5 + 4 = 9  5 + 5 = 10  
6 + 0 = 6  6 + 1 = 7  6 + 2 = 8  6 + 3 = 9  6 + 4 = 10  
7 + 0 = 7  7 + 1 = 8  7 + 2 = 9  7 + 3 = 10  
8 + 0 = 8  8 + 1 = 9  8 + 2 = 10  
9 + 0 = 9  9 + 1 = 10  
10+ 0 = 10  

本题目要求读入1个整数,输出加法表,每一行都算到结果为输入的整数为止。

不允许使用循环,不允许使用循环,不允许使用循环。重要的事情说三遍(括弧笑)

输入格式:

在一行中给出一个正整数N(0≤N≤99)。

输出格式:

按照示例的格式输出左上三角N+M的表,行列都从0开始。

  • 加号左边数字占2位、左对齐;

  • 加号右边数字占2位、右对齐;

  • 结果数字占2位,左对齐。

  • 等号两边各一个空格。

  • 两个式子之间加一个空格(行末的空格不用去掉)

输入样例:

5

输出样例:

0 + 0 = 0  0 + 1 = 1  0 + 2 = 2  0 + 3 = 3  0 + 4 = 4  0 + 5 = 5
1 + 0 = 1  1 + 1 = 2  1 + 2 = 3  1 + 3 = 4  1 + 4 = 5
2 + 0 = 2  2 + 1 = 3  2 + 2 = 4  2 + 3 = 5
3 + 0 = 3  3 + 1 = 4  3 + 2 = 5
4 + 0 = 4  4 + 1 = 5
5 + 0 = 5

使用了函数的递归方法,代码如下:

#include <stdio.h>
int n;  //注意要定义n是个全局变量,而不能在函数和主函数中分别再定义
void fun(int x,int y){
    if(x<=n&&x+y<=n){
        printf("%-2d+%2d = %-2d ",x,y,x+y);
        return fun(x,y+1);
    }
    else if(x<=n&&x+y>n){
        putchar('\n');
        return fun(x+1,0);        
    }
}
int main(){
    scanf("%d",&n);
    fun(0,0);
    return 0;
}
### 关于PTA 7-2 循环队列的解析 #### 定义与特性 循环队列是一种特殊的线性数据结构,其操作基于先进先出(FIFO)原则。当存储空间最后一个位置已被占用而需继续存入新元素时,可返回到第一个位置再利用起始部分的空间[^1]。 #### 实现方式 为了有效管理内存并提高效率,在C/C++中通常通过定义固定大小的一维数组来模拟循环队列的行为,并引入两个指针`front`和`rear`分别指向队头和即将插入的新元素的位置。此外还需要设置一个变量用于记录当前队列中的实际元素数量以便判断队满或为空的情况。 #### 初始化函数设计 初始化过程中要设定好上述提到的各种参数初始状态: ```cpp #define MAX_SIZE 100 // 假设最大容量为100 typedef struct { int data[MAX_SIZE]; int front; int rear; } CircularQueue; void Init(CircularQueue *cq){ cq->front = 0; cq->rear = 0; } ``` #### 插入操作 向循环队列入栈时首先要检查是否有足够的剩余空间;若有,则更新相应索引并将数值放入指定位置: ```cpp bool Enqueue(CircularQueue* cq, int value){ if ((cq->rear + 1) % MAX_SIZE == cq->front) { printf("The queue is full\n"); return false; } cq->data[cq->rear] = value; cq->rear = (cq->rear + 1) % MAX_SIZE; return true; } ``` #### 删除操作 从循环队列出栈即移除最前面的一个成员,同样需要注意边界条件处理: ```cpp int Dequeue(CircularQueue* cq){ if(cq->front == cq->rear){ printf("The queue is empty\n"); return -1; // 返回错误码表示失败 } int retValue = cq->data[cq->front]; cq->front = (cq->front + 1) % MAX_SIZE; return retValue; } ``` 以上代码片段展示了如何创建以及维护一个简单的循环队列实例[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值