菱形图案
题目描述
KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的菱形图案。
输入
多组输入,一个整数(2~20)。
输出
针对每行输入,输出用“*”组成的菱形,每个“*”后面有一个空格。每输出一个菱形的后面需要空一行。
样例输入Copy
234
样例输出Copy
** * * * ** * ** * ** * * * * * ** * * * ** ** * * * ** * * * * * * * ** * * * * * ** * *
while True:n = int(input())i = nwhile i >= 0:print(' ' * i, end='')print('* ' * (n + 1 - i), end='')print(' ' * (i - 1))i -= 1i = 1while i <= n:print(' ' * i, end='')print('* ' * (n + 1 - i), end='')print(' ' * (i - 1))i += 1print('')
牛妹的蛋糕
题目描述
众所周知,牛妹非常喜欢吃蛋糕。
第一天牛妹吃掉蛋糕总数三分之一多一个,第二天又将剩下的蛋糕吃掉三分之一多一个,以后每天吃掉前一天剩下的三分之一多一个,到第n天准备吃的时候只剩下一个蛋糕。
牛妹想知道第一天开始吃的时候蛋糕一共有多少呢?
输入
输入n,0<n< 30。
输出
输出第一天蛋糕的数量。
样例输入Copy
24
样例输出Copy
310
while(1):day = int(input())num = 1i = 1while i < day:num = 3 * (num + 1) // 2i = i + 1print(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 = 0for i in range(1, n + 1): # (1,n)t = n * (n - 1) + a + 1s = s + str(t) + '+'a = a + 2print(s[: -1])
单源最短路径问题
题目描述
编程实现Dijkstra算法,求一个有向加权图中,从源点出发到其他各个顶点的最短路径。
输入
第1行第1个值表示顶点个数,第2个值表示边个数;第2行开始为边(两个顶点,边的起点和终点)及权重。
输出
顶点0到每一个顶点的最短路径长度。
样例输入Copy
5 70 1 100 3 300 4 1001 2 502 4 103 2 203 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]=cd=[float("inf") for i in range(n)]d[0]=0t=0u=[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=ju[t]=1for i in range(n):if u[i]==0 and d[t]+k[t][i]<d[i]:d[i]=d[t]+k[t][i]for x in d:print(x,end=" ")print()
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<b.x;elsereturn a.y<b.y;}int b[N];void Find(int x,int y){if(x==y){int x1=a[0]*100+a[1]*10+a[2];int x2=a[3]*100+a[4]*10+a[5];int x3=a[6]*100+a[7]*10+a[8];if(x1+x2==x3){node[num].x=x1;node[num].y=x2;node[num].z=x3;num++;}return;}for(int i=x; i<=y; i++){ swap(a[i],a[x]); Find(x+1,y); swap(a[i],a[x]);}}int main(){num=0;Find(0,8);sort(node,node+num,cmp);for(int i=0;i<num;i++){printf("%d+%d=%d\n",node[i].x,node[i].y,node[i].z); }}
油田问题
题目描述
输入一个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=m||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<m;i++){scanf("%s",p[i]);}memset(dx,0,sizeof(dx));count=0;for(int i=0;i<m;i++){for(int j=0;j<n;j++){if(dx[i][j]==0&&p[i][j]=='@')s(i,j,m,n,++count);}}printf("%d\n",count);}return 0;}