食油大学C++程序设计题解

食油大学C++部分题解

hi,我是敲了两个月代码,有备而来的蒟蒻
为了水一水博客
附上我的菜鸡代码,希望大佬们轻喷(逃

数组拓展题

数组拓展题 2-问卷调查

这道题思路是找到a数组里面最后一个重复元素转移到b数组上
先开两个数组,一个输入一个存删除后的数据,再开一个int变量当计数器,以下是暴力解法,时间复杂度很高。(这道题也可以用桶排序,不过我没试:)

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n,i,j,a[110],b[110],flag=0,k=0;
    cin>>n;
    for(i=1;i<=n;i++)
        cin>>a[i];
    for(i=1;i<=n;i++)
    {
        for(j=i+1;j<=n;j++)
        {

             if(a[i]==a[j]) flag=1;
        }
        if(flag==0){b[k]=a[i];k++;}

   flag=0;}
   cout<<k<<endl;
   sort(b,b+k);
   for(i=0;i<=k-1;i++)
   {
       cout<<b[i]<<" ";
   }
    return 0;
}

数组拓展题 5-仓库商品
写个判断是否为素数的函数然后顺序+循环就可

#include<bits/stdc++.h>
using namespace std;
int sushu(int x)
{int i;
    for(i=2;i*i<=x;i++)
    {
        if(x%i==0)
            return 0;
         }

            return 1;
}
int main()
{
    long long int n;
    cin>>n;
    for(int i=2;i<=n;i++)
    {
        if(sushu(i))
          cout<<i<<" ";
    }
    return 0;
}

数组拓展题 6-出圈
经典约瑟夫问题,注意计数器的使用
这道题也能用结构体+链表做

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n,m,l,a[110];
    cin>>m>>n;
    int t=m;
      l=1;
    while(t){
    int s=0;
        for(int i=l;s!=n;i++)
		{
            if(i>m)
			i%=m;
            if(a[i]==-1)
			continue;
            s++;
            if(s==n)
			{
             a[i]=-1;
              t--;
                l=i+1;
                cout<<i<<endl;
                break;
            }
        }
    }
    return 0;
}

数组拓展题 7-学习对象
这道题我刚开始用结构体重载运算符,愚蠢了。
后面发现遍历查找就ok,只不过时间复杂度还是很高,代码如下
(maxn需要开的很大,我开到1e6都过不去最后一个测试点…)

#include<bits/stdc++.h>
using namespace std;

int main()
{
    int n,j,maxn,ans,a[1010];
    cin>>n;
    for(int i=1;i<=n;i++)
        cin>>a[i];
    for(int i=1;i<=n;i++)
    {
        ans=0;maxn=1e7;
        for(j=1;j<=n;j++)
        {
            if(a[j]>a[i]&&a[j]<maxn){ans=j;maxn=a[j];}
        }
        cout<<ans<<endl;
    }
    return 0;
}

数组拓展题 8-图像翻转
这道题看会了9.10也迎刃而解
开个二维数组直接逆着输出就行,想不明白可以在纸上画一画矩阵

#include<bits/stdc++.h>
using namespace std;
int a[1010][1010];
int n,m;
int cnt=0;
double res=0.0;
int main()
{

    cin>>n>>m;
    for(int i=1;i<=2*n;i++){
        for(int j=1;j<=m;j++){
            cin>>a[i][j];
        }
    }
     for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            if(a[i][j]==a[i+n][j])cnt++;
        }
    }
    res=cnt*1.0/(m*n)*100;
    cout<<fixed<<setprecision(2)<<res;
    return 0;
}

数组拓展题 11-没有人比我更懂美国
这道题和12都要注意向上取整
不会的建议百度:C++如何使用ceil、floor等取整函数

#include<bits/stdc++.h>
using namespace std;
int a[110];
int main()
{
    int n,cnt=0;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
    }
    sort(a+1,a+n+1);
    for(int i=1;i<=ceil(n*1.0/2);i++)
    {
        cnt+=a[i]/2+1;
    }
    cout<<cnt;
    return 0;
}

数组拓展题 15-字符转换
这道题注意输入和赋初值就ok

#include<bits/stdc++.h>
using namespace std;
int main()
{
  char a[1010];
  int s[15],t;
  for(int i=0;i<=9;i++){s[i]=0;}
  cin.getline(a,sizeof(a));
  int n=strlen(a);
  for(int i=0;i<n;i++){
  if(a[i]>='0'&&a[i]<='9'){
   t=a[i]-'0';
    s[t]++;}
  }
  for(int i=0;i<=9;i++)
  {
      if(s[i]!=0)cout<<i<<':'<<s[i]<<endl;
  }
  return 0;
}

数组拓展题 16-字符转换Plus
这道题跟上道题思路差不多,就是要注意转换类型(水题)

#include<bits/stdc++.h>
using namespace std;
int main()
{
  char a[130];
  int cnt=0;
  while(cin.getline(a,sizeof(a))){
  int n=strlen(a);
  for(int i=0;i<n;i++){
  if(isupper(a[i]))
  {
      cnt+=int(a[i]-64);
  }}
  if(cnt>100)cout<<"INVALID"<<endl;
  if(cnt<=100)cout<<cnt<<endl;
  cnt=0;
  }
  return 0;
}

数组拓展题 17-删除字符
这道题要注意最后为b数组补充一个空字符,不然会WA

#include<bits/stdc++.h>
using namespace std;
int main()
{
  char a[110],b[110];
  int t=0;
  int flag;
  cin>>a;
  int n=strlen(a);
  for(int i=0;i<n;i++)
  {
      flag=1;
      for(int j=0;j<i;j++)
        {
        if(a[i]==a[j]) flag=0;
        }
        if(flag==1) {b[t]=a[i];t++;}
  }
  b[t]=0;
  cout<<b;
  return 0;
}

数组拓展题 19-插入字符
暴力插入字符就可以,数据较少所以用时间复杂度较高的算法也可以过

#include<bits/stdc++.h>
using namespace std;
char a[101],b[101],c[101];
char k;
int f,t=0;
int main()
{
    cin>>a>>b>>k;
    for(int i=0;a[i]!='\0';i++)
    {
        if(a[i]==k) {f=i;break;}
    }
    for(int j=0;j<=f-1;j++){c[t]=a[j];t++;}
    for(int i=0;b[i]!='\0';i++){
        c[t]=b[i];t++;}
    for(int j=f;a[j]!='\0';j++){
        c[t]=a[j];t++;}
    c[t]=0;
    cout<<c;
  return 0;
}

数组拓展题 22-茶艺
这道题直接循环转进制就可以,要注意的是ASCII码的转换

#include<bits/stdc++.h>
using namespace std;
int n,s,b;
char a[100];
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
    cin>>a>>b;
    int len = strlen(a);
    s=0;
    for(int i = 0;i<len;i++)
    {
        s+=(a[i]-48)*pow(2,len-i-1);
    }

    cout<<s*b<<endl;}
    return 0;
}

结构体拓展题

结构体拓展题 1-奖学金
这道题先定义结构体,然后排序。
要注意题中特殊要求,在编写cmp函数时对应if语句

#include<bits/stdc++.h>
using namespace std;
struct student
{
    int id;
    int shu,yu,wai;
    int fen;
}s[300];
bool cmp(student a,student b)
{
     if(a.fen!=b.fen)return a.fen>b.fen;
     else if((a.fen==b.fen)&&(a.yu!=b.yu))return a.yu>b.yu;
     return a.id<b.id;
}
int main()
{
	int n;
	cin>>n;
	for(int i=1;i<=n;i++)
    {
        cin>>s[i].yu>>s[i].shu>>s[i].wai;
        s[i].id=i;
        s[i].fen=s[i].shu+s[i].yu+s[i].wai;
    }
    sort(s+1,s+n+1,cmp);
    for(int i=1;i<=5;i++)
    {
        cout<<s[i].id<<" "<<s[i].fen<<endl;
    }
	return 0;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值