5:
我能说这个代码调试了一天吗?
思路:
getline函数输入,然后遍历字符串,记录6出现的次数,如果连续6的次数大于3,将第一个6换成9,然后删除剩下的6,之后更新6的次数、s的长度以及下标i,继续记录6的次数,如果连续6的次数大于9,则将第一个6换成2,第二个6换成7,删除剩余的6,更新数据。
一直WA是因为在更新数据的时候先更新的coun,即6的次数,导致在更新i时出错,因为i的更新是基于coun的。
代码如下:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
int main()
{
int n,i,j,k;
string s;
getline(cin,s);
int coun=0;
int start=0;
int len=s.size();
if(s[0]=='6')
{
start=0;
coun=1;
}
for(i=1; i<len; i++)
{
if(s[i]=='6'&&s[i-1]!='6')
{
//cout<<"ceshi"<<endl;
start=i;
coun++;
//cout<<"start="<<start<<endl;
}
else if(s[i]=='6')
{
//cout<<"ceshi"<<endl;
coun++;
}
else if(s[i]!='6')
{
//cout<<"ceshi"<<endl;
//cout<<coun<<endl;
if(coun>9)
{
s[start]='2';
s[start+1]='7';
s.erase(start+2,coun-2);
len-=coun-2;
i-=coun-1;
coun=0;
// i--;
}
else if(coun>3)
{
//cout<<"i=="<<i<<endl;
//cout<<"coun="<<coun<<endl;
//cout<<"ceshi"<<endl;
s[start]='9';
s.erase(start+1,coun-1);
len-=coun-1;
i-=coun;
coun=0;
//cout<<"i="<<i<<endl;
//cout<<"len-"<<len<<endl;
//i--;
}
coun=0;
}
}
//cout<<i<<endl;
//cout<<coun<<endl;
//cout<<len<<endl;
// cout<<start<<endl;
// cout<<s<<endl;
if(coun>9)
{
s[start]='2';
s[start+1]='7';
s.erase(start+2,coun-2);
coun=0;
}
else if(coun>3)
{
//cout<<"ceshi"<<endl;
s[start]='9';
s.erase(start+1,coun-1);
coun=0;
}
cout<<s<<endl;
return 0;
}
6:
水题,纯模拟,代码:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
int main()
{
int n,i,j,k,a[100],b[100];
string s[100];
cin>>n;
for(i=0;i<n;i++)
{
cin>>a[i]>>s[i];
b[i]=1;
}
for(i=0;i<n;i++)
{
if(b[i]==1)
{
for(j=n-1;j>=0;j--)
{
if(b[j]==1&&a[j]!=a[i])
{
cout<<s[i]<<' '<<s[j]<<endl;
b[i]=0;
b[j]=0;
break;
}
}
}
}
return 0;
}
7:
模拟,代码如下:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
int main()
{
int n,i,j,k;
float h,w;
cin>>n;
while(n--)
{
cin>>h>>w;
float standnard=(h-100)*0.9;
w/=2;
if(abs(w-standnard)<standnard*0.1)
{
cout<<"You are wan mei!"<<endl;
}
else if(w>standnard)
{
cout<<"You are tai pang le!"<<endl;
}
else
{
cout<<"You are tai shou le!"<<endl;
}
}
return 0;
}
8:
都是这种题就好了
代码:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
int main()
{
cout<<"This is a simple problem."<<endl;
return 0;
}
9:
水题,结构体排序+模拟:
思路:
先存入每一位同学的信息,然后按照题目要求进行结构体排序,最后进行输出。输出的时候需要注意如果这一位同学与上一位同学的分数一样,则排名不需要更新,反之,更新排名至i+i。
代码如下:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
struct student
{
int score;
string name;
};
bool cmp(student i,student j)
{
if(i.score==j.score)
{
return i.name<j.name;
}
return i.score>j.score;
}
int main()
{
student stu[10000+8];
int n,i,j,k;
string s;
int g;
cin>>n>>g>>k;
int sum=0;
for(i=0;i<n;i++)
{
cin>>stu[i].name>>stu[i].score;
if(stu[i].score>=60&&stu[i].score<g)
{
sum+=20;
}
else if(stu[i].score>=g&&stu[i].score<=100)
{
sum+=50;
}
}
sort(stu,stu+n,cmp);
int coun=1;
cout<<sum<<endl;
for(i=0;i<k;i++)
{
if(i!=0&&stu[i].score==stu[i-1].score)
{
;
}
else if(i!=0&&stu[i].score!=stu[i-1].score)
{
coun=i+1;
}
cout<<coun<<' '<<stu[i].name<<' '<<stu[i].score<<endl;
}
while(stu[i].score==stu[i-1].score)
{
cout<<coun<<' '<<stu[i].name<<' '<<stu[i].score<<endl;
i++;
}
return 0;
}
10:
一个写崩了的模拟题。
思路:
存储链表,然后遍历,没必要在开一个新的链表,直接把删除的元素的下一个地址更改就行了。需要注意的是如果该节点删除,那么上一个节点不会发生变化。
代码如下:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int Max=1e5+8;
int start=0;
int head=-2;
int n;
struct lis
{
int num;
int next=-1;
};
bool vis[Max];
int main()
{
lis a[Max];
int i,j,k,t;
int xia;
cin>>start>>n;
int num=0;
for(i=0;i<n;i++)
{
cin>>k;
cin>>a[k].num>>a[k].next;
}
for(i=start,j=-1;i!=-1;)
{
xia=a[i].next;
int key=abs(a[i].num);
//cout<<"-----------------"<<i<<endl;
if(vis[key]==1)
{
if(head==-2)
{
head=i;
t=head;
//a[t].num=a[i].num;
a[t].next=-1;
}
else
{
a[t].next=i;
t=i;
a[t].next=-1;
//a[t].num=a[i].num;
}
a[j].next=xia;
}
else
{
//h.insert(abs(a[i].num));
vis[key]=1;
j=i;
}
i=xia;
}
for(i=start;i!=-1;i=a[i].next)
{
printf("%05d %d ",i,a[i].num);
if(a[i].next==-1)
{
printf("-1 ");
}
else
{
printf("%05d ",a[i].next);
}
}
for(i=head;i!=-1;i=a[i].next)
{
printf("%05d %d ",i,a[i].num);
if(a[i].next==-1)
{
printf("-1 ");
}
else
{
printf("%05d ",a[i].next);
}
}
return 0;
}
12题:
模拟,结构体存储月饼的总量、总价格,单价,根据单价结构体排序,模拟,输出结果即可。
代码如下:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
struct moon
{
float unit,price,num;
};
bool cmp(moon i,moon j)
{
return i.unit>j.unit;
}
int main()
{
int n,i,j,k;
cin>>n;
float d;
cin>>d;
moon cake[2000];
for(i=0;i<n;i++)
{
cin>>cake[i].num;
}
for(i=0;i<n;i++)
{
cin>>cake[i].price;
cake[i].unit=cake[i].price/cake[i].num;
}
sort(cake,cake+n,cmp);
float ans=0;
for(i=0;i<n;i++)
{
if(d>=cake[i].num)
{
//cout<<cake[i].num<<endl;
ans+=cake[i].price;
d-=cake[i].num;
}
else
{
ans+=d*cake[i].unit;
break;
}
}
cout<<fixed<<setprecision(2)<<ans<<endl;
return 0;
}