江南信息学第六周练习20221014

1001:给定一个字符,用它构造一个对角线长3个字符,倾斜放置的菱形

python:

c = input()
print(' '+c)
print(c+c+c) #3*c
print(' '+c)
View Code

 

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;
}
View Code

 

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)
View Code

 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;
}
View Code

 

 

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)
View Code

 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;    
    }
}
View Code

 

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.")
View Code

 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;
}
View Code

 

1005:买汉堡包是一件快乐的事情,因为可以吃美食了。不过也不能多吃,所以我们得限制买汉堡包的数量。每单次买汉堡包不能超过100个,否则这次买的汉堡无效 。

python:

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

 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;
}
View Code

 

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))
View Code

 

#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;
} 
View Code

 

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)
View Code

 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;    
}
View Code

 

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)
View Code

 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;    
}
View Code

 

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()
    
View Code

 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 << ' ';
    }
}
View Code

 

 

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 
View Code

 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;
}
View Code

 

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;
}
View Code

 

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;
}
View Code

 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)
View Code

 

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;
}
View Code

 

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;
}
View Code

 

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;
}
View Code

 

posted @ 2022-10-15 14:03  CRt0729  阅读(126)  评论(0编辑  收藏  举报