2023年秋季学期《算法分析与设计》练习14 OJ-1421 算法分析与设计练习14,使用python、C语言

菱形图案

题目描述

KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的菱形图案。

输入

多组输入,一个整数(2~20)。

输出

针对每行输入,输出用“*”组成的菱形,每个“*”后面有一个空格。每输出一个菱形的后面需要空一行。

样例输入 Copy
2
3
4
样例输出 Copy
  * 
 * * 
* * * 
 * * 
  * 

   * 
  * * 
 * * * 
* * * * 
 * * * 
  * * 
   * 

    * 
   * * 
  * * * 
 * * * * 
* * * * * 
 * * * * 
  * * * 
   * * 
    * 
while True:
    n = int(input())
    i = n
    while i >= 0:
        print(' ' * i, end='')
        print('* ' * (n + 1 - i), end='')
        print(' ' * (i - 1))
        i -= 1
    i = 1
    while i <= n:
        print(' ' * i, end='')
        print('* ' * (n + 1 - i), end='')
        print(' ' * (i - 1))
        i += 1
    print('')

牛妹的蛋糕

题目描述

众所周知,牛妹非常喜欢吃蛋糕。

第一天牛妹吃掉蛋糕总数三分之一多一个,第二天又将剩下的蛋糕吃掉三分之一多一个,以后每天吃掉前一天剩下的三分之一多一个,到第n天准备吃的时候只剩下一个蛋糕。

牛妹想知道第一天开始吃的时候蛋糕一共有多少呢?

输入

输入n,0

输出

输出第一天蛋糕的数量。

样例输入 Copy
2
4
样例输出 Copy
3
10
while(1):
    day = int(input())
    num = 1
    i = 1
    while i < day:
        num = 3 * (num + 1) // 2
        i = i + 1
    print(int(num))

尼科彻斯定理

题目描述

验证尼科彻斯定理,即:任何一个整数m的立方都可以写成m个连续奇数之和。

例如:

1^3=1

2^3=3+5

3^3=7+9+11

4^3=13+15+17+19

输入

多组输入,输入一个整数。

输出

输出分解后的字符串。

样例输入 Copy
6
样例输出 Copy
31+33+35+37+39+41
while True:
    n = int(input())
    s = ''
    a = 0
    for i in range(1, n + 1):   # (1,n)
        t = n * (n - 1) + a + 1
        s = s + str(t) + '+'
        a = a + 2
    print(s[: -1])

单源最短路径问题

题目描述

编程实现Dijkstra算法,求一个有向加权图中,从源点出发到其他各个顶点的最短路径。

输入

第1行第1个值表示顶点个数,第2个值表示边个数;第2行开始为边(两个顶点,边的起点和终点)及权重。

输出

顶点0到每一个顶点的最短路径长度。

样例输入 Copy
5 7
0 1 10
0 3 30
0 4 100
1 2 50
2 4 10
3 2 20
3 4 60
样例输出 Copy
0 10 50 30 60
while True:
    n, m = map(int, input().split())
    k=[[float("inf") for i in range(n)] for j in range(n)]
    for i in range(m):
        a,b,c=map(int,input().split())
        k[a][b]=c
    d=[float("inf") for i in range(n)]
    d[0]=0
    t=0
    u=[0 for i in range(n)]
    for i in range(n):
        maxlen=float("inf")
        for j in range(n):
            if u[j]==0 and maxlen > d[j]:
                maxlen=d[j]
                t=j
        u[t]=1
        for i in range(n):
            if u[i]==0 and d[t]+k[t][i]

ABC + DEF = GHI

题目描述

用1, 2, 3...9 这九个数字组成一个数学公式,满足:ABC + DEF = GHI,每个数字只能出现一次,编写程序输出所有的组合。

输入

输出

输出所有的 ABC + DEF = GHI,
每行一条数据,格式为ABC+DEF=GHI
输出结果按照ABC升序排列,如果ABC相同,则按照DEF升序排列。

#include
#define swap(x, y) {int temp=x;x=y;y=temp;}
using namespace std;
const int N=1005;

typedef struct{
int x,y,z;
}Node;
Node node[N];
int num;
int a[9]={1,2,3,4,5,6,7,8,9};

bool cmp(Node a,Node b){
    if(a.x!=b.x)
        return a.x

油田问题

题目描述

输入一个m行n列的字符矩阵,统计字符“@”组成多少个八连块。如果两个字符“@”所在的格子相邻(横、竖或者对角线方向),即属于同一个八连块。

输入
多组输入
输入行数m,以及列数n。
然后输入*和@
1<=n,m<=100
输出
联通块个数
样例输入 Copy
5 5
****@
*@@*@
*@**@
@@@*@
@@**@
样例输出 Copy
2
#include
#include 

int fx[8]={-1,0,1,1,1,0,-1,-1};
int fy[8]={1,1,1,0,-1,-1,-1,0};
char p[100][100];
int dx[100][100];
int count; 

void s(int i,int j,int m,int n,int count){
    if(i<0||i>=m||j<0||j>=n||dx[i][j]>0||p[i][j]=='*') return;
    dx[i][j]=count;
    for(int k=0;k<8;k++)
        s(i+fx[k],j+fy[k],m,n,count);
}
int main(){
    int m,n;
    while(~scanf("%d %d",&m,&n)){
        for(int i=0;i

 

你可能感兴趣的:(算法,算法,笔记,学习)