江南信息学第六周练习20221014
1001:给定一个字符,用它构造一个对角线长3个字符,倾斜放置的菱形
python:

c = input() print(' '+c) print(c+c+c) #3*c print(' '+c)
C++:

#include<iostream> #include<bits/stdc++.h> using namespace std; int main(){ char c; cin>>c; cout<<" "<<c<<endl; cout<<c<<c<<c<<endl; cout<<" "<<c<<endl; return 0; }
1002:一只大象口渴了,要喝20升水才能解渴,但现在只有一个深h厘米,底面半径为r厘米的小圆桶(h和r都是整数)。问大象至少要喝多少桶水才会解渴。
python:

h,r = map(int,input().split()) #输入高和半径 pi = 3.14159 h = h/10 #厘米化分米 r = r/10 v = pi*r*r*h #计算小圆桶体积 t = 20/v if t==int(t): #判断桶数t是否是整除 print(int(t)) else: print(int(t)+1)
C++:

#include <iostream> #include <cmath> using namespace std; int main() { double pi=3.14159,v,h,r; cin>>h>>r; v=pi*r*r*h/1000; cout<<int(ceil(20/v)); return 0; }
1003:你买了一箱n个苹果,很不幸的是买完时箱子里混进了一条虫子。虫子每x小时能吃掉一个苹果,假设虫子在吃完一个苹果之前不会吃另一个,那么经过y小时你还有多少个完整的苹果?
python:

n = int(input()) x = int(input()) y = int(input()) z = y/x #判断z被吃掉了几个苹果 if n-z<=0: #特殊判断是否已经没有苹果 print(0) else: if z==int(z):#刚好吃掉z个苹果 print(n-int(z)) else: #有还没吃完不完整的苹果 print(n-int(z)-1)
C++:

#include<iostream> using namespace std; int main(){ int a,b,c,k; cin>>a>>b>>c; if(a-c/b<=0){ cout<<0<<endl; } else{ k=c/b; if (c%b!=0){ k++; } cout<<a-k<<endl; } }
1004:BMI指数
python:

w,h = map(int,input().split()) w = w/2 #斤转化为公斤 h = h/100 #厘米转化为米 bmi = w/(h*h) print('Weight: %.2fkg'%(w)) #对w保留两位小数输出 print("Height: %.2fm"%(h)) #对h保留两位小数输出 if bmi<18.5:#体重过低 print("Your body is too thin.") elif bmi>=18.5 and bmi<=24: #体重正常 print("Your body is normal.") else: #体重超重 print("Your body is too fat.")
C++:

#include<bits/stdc++.h> using namespace std; int main() { double w,h,a; cin>>w>>h; w=w/2; h=h/100; printf("%s %.2f%s\n","Weight:",w,"kg"); printf("%s %.2f%s\n","Height:",h,"m"); a=w/(h*h); if (a<18.5) cout<<"Your body is too thin."; else if (18.5<a && a<24) cout<<"Your body is normal."; else cout<<"Your body is too fat."; return 0; }
1005:买汉堡包是一件快乐的事情,因为可以吃美食了。不过也不能多吃,所以我们得限制买汉堡包的数量。每单次买汉堡包不能超过100个,否则这次买的汉堡无效 。
python:

n = int(input()) sum = 0 #求和变量 for i in range(n): x = int(input()) #输入本次买汉堡的数量 if x<=100: #汉堡数量不超过限制 sum+=x print(sum)
C++:

#include<iostream> #include<bits/stdc++.h> using namespace std; int main(){ int a,i=0; cin>>a; while(a--){ int b; cin>>b; if(b<=100){ i=i+b; } } cout<<i<<endl; return 0; }
1006:“天天快乐编程”班的同学都是懂事的孩子,每天除了编程,还会帮妈妈买菜,可是买菜算钱还是有点麻烦,还好学会了编程,可以写个程序帮忙算一下。
python:

n = int(input()) sum = 0 #求和变量 for i in range(n): x,y = map(float,input().split()) #因为单价是小数,所以要用float sum+=x*y #把种类数x乘上单价y print("%.2f"%(sum))

#include<stdio.h> #include<iostream> using namespace std; int main(){ double n,sum=0,x,y; cin>>n; while(n--){ cin>>x>>y; sum = sum+x*y; } printf("%.2f\n",sum); return 0; }
1007:求n个整数中的最大值。
python:

n = int(input()) maxx = -9999999999 #求最大值要初始化让maxx小一些 for i in range(n): x = int(input()) maxx = max(x,maxx) #比较x和maxx得出最大值 print(maxx)
C++:

#include<bits/stdc++.h> #include<iostream> using namespace std; int main(){ int b; cin>>b; int max; for(int i = 0;i<b;i++){ int a; cin>>a; if(i == 0)max = a; //将第一个数赋值为a最大值 else{ if(a>max){ //如果后面有a比当前max还大 max = a; //更新最大值max为a } } } cout<<max; return 0; }
1008:自从小z上了小学五年级,作业开始多了起来。每天的作业量都是不定的,小z也会用不同的时间完成作业。
python:

n = int(input()) a = list(map(int,input().split())) #横向输入存储 x = float(input()) sum = 0 #作业多的天数 for i in a: if i>x: #i>x代表第i天作业比x多 sum = sum+1 print(sum)
C++:

#include<bits/stdc++.h> using namespace std; int n,sum=0; int a[51]; double x; int main(){ cin>>n; for(int i=1;i<=n;i++) //循环1到n输入n个数到a数组中 cin>>a[i]; cin>>x; //作业多的标准值 for(int i=1;i<=n;i++) if(a[i]>=x)sum++; //如果第i天a[i]大于x,那么作业多的天数sum+1 cout<<sum; return 0; }
1009:本题要求读入N名学生的成绩,将获得某一给定分数的学生人数输出。
python:

n = int(input()) a = list(map(int,input().split())) score = list(map(int,input().split())) #以上是输入 k = score[0] #从下标0取出k ans = [0]*101 #开一个初始值全为0的列表 out = [] # for i in a: ans[i]+=1 #将i成绩的下标在ans列表里+1 for j in range(1,k+1): print(ans[score[j]],end='') #对于查询的第j个元素,输出在ans列表里的出现次数 if j!=k: print(' ',end='') #每个输出直接隔一个空格 else: print()
C++:

#include<bits/stdc++.h> using namespace std; int n, m[101], a, b, x; int main(){ cin >> n; for (int i = 1;i <= n;i++){ cin >> x; m[x]++; } cin >> a; for (int i = 1;i <= a;i++){ cin >> b; cout << m[b]; if (i < a) cout << ' '; } }
1010:有一个长度为n的整数序列。请写一个程序,把序列中的最小值与第一个数交换,最大值与最后一个数交换。输出转换好的序列。
python:

n = int(input()) a = list(map(int,input().split())) #横向输入存储 maxx = max(a) minn = min(a) for i in range(n): if a[i]==minn: #如果第i个数是最小值 a[i],a[0] = a[0],a[i] #交换第i个数和第0个数 for i in range(n): if a[i]==maxx: #如果第i个数是最大值 a[i],a[n-1] = a[n-1],a[i] #交换第i个数和第0个数 print(' '.join(str(i) for i in a))#列表横向输出且以空格分隔法join
C++:

#include<iostream> #include<bits/stdc++.h> using namespace std; int main(){ int n; cin>>n; int a[10005]; int max=-999999,min=100000; int indexmax,indexmin; for(int i=0;i<n;i++){ cin>>a[i]; } for(int i=0;i<n;i++){ if(a[i]<min){ min=a[i]; indexmin=i; } } int c; c=a[0]; a[0]=a[indexmin]; a[indexmin]=c; for(int i=0;i<n;i++){ if(a[i]>max){ max=a[i]; indexmax=i; } } int c1; c1=a[n-1]; a[n-1]=a[indexmax]; a[indexmax]=c1; for(int i=0;i<n;i++){ cout<<a[i]; if(i<n-1){ cout<<" "; } } return 0; }
1011:把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。
C++:

#include<bits/stdc++.h> using namespace std; int a[20][20]; //状态:a[m][n]表示m个苹果放在n个盘子里的方法数 int f(int m,int n) { int i,j; for(i=1;i<=n;i++) //0个苹果 a[0][i]=1; for(i=1;i<=m;i++) //1个盘子 a[i][1]=1; for(i=1;i<=m;i++) { for(j=2;j<=n;j++) { if(i<j) a[i][j]=a[i][i]; else a[i][j]=a[i][j-1]+a[i-j][j]; //状态转移方程 } } } int main() { int m,n,i,j,k; cin>>k; while(k--) { cin>>m>>n; f(m,n); cout<<a[m][n]<<endl; } return 0; }
1012:一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数。
C++:

#include<bits/stdc++.h> using namespace std; string a,b; int main() { getline(cin,a); getline(cin,b); for(int i=0;i<a.length();i++)if(a[i]>='A'&&a[i]<='Z')a[i]+=32; for(int i=0;i<b.length();i++)if(b[i]>='A'&&b[i]<='Z')b[i]+=32; int ans=0,id,f=0; int k=0; for(int i=0;i<b.length();i++) { if(b[i]==' ') { string s = b.substr(k,i-k); //获取从第k位开始,长度位i-k的字符串 //cout<<s<<" "<<k<<endl; if(s==a){ ans++; if(f==0){ id = k; //记录起始位置 f = 1; } } k = i+1; //让k等于空格i的下一位,这样k的下标就能从字母开始了 } } string s = b.substr(k,b.length()-k);//因为上面的循环不能获取最后一个单词,所以在循环外特殊获取一下 if(s==a)ans++; //cout<<s<<endl; if(ans!=0)cout<<ans<<" "<<id; else cout<<-1; return 0; }
python:

a = input() a = a.lower() #lower将大写变成小写 b = input() b = b.lower() ans = 0#统计单词数 s = b.split(' ') #将b用split以空格分隔 f = 0 #表示还没找到单词 for i in range(len(s)): if s[i]==a: ans+=1 if f==0: id = i #获取第一个找到的单词的为止 f = 1 if ans==0: print(-1) else: l = 0 for j in range(id): l+=len(s[j]) #把第i个单词的长度加上 l+=1 #加上空格 print(ans,l)
1013:选数
C++:

#include<bits/stdc++.h> using namespace std; int ma[105]; //地图 int vis[105]; //标记数组,标记某点坐标是否已访问过 int n,k,sum,ans,len; void dfs(int x); int prime(int n); int main() { cin>>n>>k; for(int i=1;i<=n;i++) cin>>ma[i]; //以上是输入 dfs(1); //从0开始 cout<<ans; return 0; } void dfs(int x) { if(len==k){//递归边界,取数len==k时结束 if(prime(sum))ans++; return; } for(int i=x;i<=n;i++) //从第x个数开始 { if(vis[i]==0) //判断第i个数是否选择过 { sum+=ma[i]; len++; vis[i] = 1; dfs(i+1); len--; //回溯 vis[i] = 0; sum-=ma[i]; } } } int prime(int n) //素数判断函数 { if(n==1)return 0; for(int i=2;i*i<=n;i++) if(n%i==0)return 0; return 1; }
1014:一个n * m的方格图,一些格子被涂成了黑色,在方格图中被标为1,白色格子标为0。问有多少个四连通的黑色格子连通块。四连通的黑色格子连通块指的是一片由黑色格子组成的区域,其中的每个黑色格子能通过四连通的走法(上下左右),只走黑色格子,到达该联通块中的其它黑色格子。
c++:

#include<bits/stdc++.h> using namespace std; int g[105][105]; int vis[105][105]; int nex[4][2] = {{0,1},{1,0},{0,-1},{-1,0}}; int n,m,ans; void dfs(int x,int y) { for(int i=0;i<4;i++) { int tx = nex[i][0]+x; int ty = nex[i][1]+y; if(tx<1||tx>n||ty<1||ty>m)continue; if(g[tx][ty]==1&&vis[tx][ty]==0) { vis[tx][ty] = 1; dfs(tx,ty); } } } int main() { cin>>n>>m; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) cin>>g[i][j]; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) { if(g[i][j]==1&&vis[i][j]==0) { vis[i][j] = 1; ans++; dfs(i,j); } } cout<<ans; return 0; }
1015:一个商人穿过一个N×N的正方形的网格,去参加一个非常重要的商务活动
c++:

#include<bits/stdc++.h> using namespace std; int a[101][101]; int dp[101][101]; int n; int main(){ cin>>n; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) cin>>a[i][j]; memset(dp,9999,sizeof(dp)); for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ if(i==1&&j==1)dp[i][j]=a[i][j]; else dp[i][j]=min(dp[i-1][j],dp[i][j-1])+a[i][j]; } } cout<<dp[n][n]; return 0; }