c语言入门100例第三十四三十五题

#循环输入。每组数据先输入一个n(n≤10),然后n行n列数据代表一个矩阵,每个数据为一个整数,然后再给出一个数字R,输出这个矩阵按照顺时针旋转90R度以后的矩阵。当没有任何输入时,程序结束。
代码思路:90度,180度,270度,360度实际上是分别进行一次九十度反转,两次九十度反转,三次九十度反转,四次九十度反转。那么对进行一次九十度反转进行研究,发现二维数组的下标进行了如下变化,a[i][j]->a[j][i-1-j];

#include <stdio.h>
#define maxn 10

void clockwiseRotate90(int n;int mat[maxn][maxn]){
int tmp[maxn][maxn];//临时矩阵
int i,j;
for(i=0;i<n;i++){
for(j=0;j<n;j++){
tmp[j][i-1-j]=mat[i][j];
}
}
for(i=0;i<n;i++){
for(j=0;j<n;j++){
mat[i][j]=tmp[i][j];
}
}
}

int main(){
int n,R;
int i,j;
while(scanf("%d",&n)!=EOF){
for(i=0;i<n;i++){
for(j=0;j<n;j++){
scanf("%d",&mat[i][j]);
}
}
scanf("%d",&R);
R=R%4;
for(i=0;i<R;i++)
{
clockwiseRotate90(n,mat);
}
for(i=0;i<n;i++){
for(j=0;j<n;j++){
if(j)
{printf(" ");
}
}
printf("\n");
}
}
return 0;
}

#循环输入。每组数据总共输入两个矩阵,每个矩阵先输入n和m,然后再输入一个n×m的矩阵。输出这两个矩阵的乘积,如果不存在则输出NULL。当没有任何输入时,程序结束。

#include <stdio.h>

#define maxn 101
int matA[maxn][maxn], matB[maxn][maxn];
int matRet[maxn][maxn];

void inputMatrix(int n, int m, int mat[maxn][maxn]) {
    int i, j;
    for(i = 0; i < n; ++i) {
        for(j = 0; j < m; ++j) {
            scanf("%d", &mat[i][j]);                       // (1)
        }
    }
}

void outputMatrix(int n, int m, int mat[maxn][maxn]) {
     int i, j;
    for(i = 0; i < n; ++i) {
        for(j = 0; j < m; ++j) {
            if(j) {
                printf(" ");
            }
            printf("%d", mat[i][j]);                      // (2)
        }
        puts("");
    }
}

void multiplyMatrix(int a, int b, int matA[maxn][maxn], int c, int d, int matB[maxn][maxn], int matRet[maxn][maxn]) {
    // assert(b == c);
    int i, j, k;
    for(i = 0; i < a; ++i) {
        for(j = 0; j < d; ++j) {
            matRet[i][j] = 0;
            for(k = 0; k < b; ++k) {
                matRet[i][j] += matA[i][k] * matB[k][j];  //  (3)
             }
        }
    }
}

int main() {
    int a, b, c, d;
    while(scanf("%d %d", &a, &b) != EOF) {
        inputMatrix(a, b, matA);
        scanf("%d %d", &c, &d);
        inputMatrix(c, d, matB);
                        
        if(b != c) {
            printf("NULL\n");
        }else {
            multiplyMatrix(a, b, matA, c, d, matB, matRet);
            outputMatrix(a, d, matRet);            
        }
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于PyTorch的Embedding和LSTM的自动写诗实验LSTM (Long Short-Term Memory) 是一种特殊的循环神经网络(RNN)架构,用于处理具有长期依赖关系的序列数据。传统的RNN在处理长序列时往往会遇到梯度消失或梯度爆炸的问,导致无法有效地捕捉长期依赖。LSTM通过引入门控机制(Gating Mechanism)和记忆单元(Memory Cell)来克服这些问。 以下是LSTM的基本结构和主要组件: 记忆单元(Memory Cell):记忆单元是LSTM的核心,用于存储长期信息。它像一个传送带一样,在整个链上运行,只有一些小的线性交互。信息很容易地在其上保持不变。 输入门(Input Gate):输入门决定了哪些新的信息会被加入到记忆单元中。它由当前时刻的输入和上一时刻的隐藏状态共同决定。 遗忘门(Forget Gate):遗忘门决定了哪些信息会从记忆单元中被丢弃或遗忘。它也由当前时刻的输入和上一时刻的隐藏状态共同决定。 输出门(Output Gate):输出门决定了哪些信息会从记忆单元中输出到当前时刻的隐藏状态中。同样地,它也由当前时刻的输入和上一时刻的隐藏状态共同决定。 LSTM的计算过程可以大致描述为: 通过遗忘门决定从记忆单元中丢弃哪些信息。 通过输入门决定哪些新的信息会被加入到记忆单元中。 更新记忆单元的状态。 通过输出门决定哪些信息会从记忆单元中输出到当前时刻的隐藏状态中。 由于LSTM能够有效地处理长期依赖关系,它在许多序列建模任务中都取得了很好的效果,如语音识别、文本生成、机器翻译、时序预测等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值