目录
1001 害死人不偿命的(3n+1)猜想
参考代码
#include<stdio.h>
int main()
{
int num=0,step=0;
scanf("%d",&num);
while(num != 1)
{
if(0==num%2)
{
num=num/2;
}
else
{
num=3*num+1;
num=num/2;
}
step++;
}
printf("%d",step);
}
————————————————
版权声明:本文为CSDN博主「对音乐倔强的小周」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_44042590/article/details/86133029
1002 写出这个数
1003 我要通过!
自己写的代码
自己再做一遍,感觉上面这段代码写的非常棒,是自己没有想到的方法
#include<iostream>
#include<string>
using namespace std;
int main()
{
string str;
int n, x, y, p, t, a;
cin >> n;
while (n--)
{
cin >> str; //A A P A A T A A A A
//0 1 2 3 4 5 6 7 8 9
// x y
x = 0; y = 0; p = 0; t = 0; a = 0;
for (int i = 0; i < str.size(); i++)
{
if (str[i] == 'A')
{
a++;
}
if (str[i] == 'P')
{
p++;
x = i;
}
if (str[i] == 'T')
{
t++;
y = i;
}
}
if (a + p + t != str.size() || p > 1 || t > 1 || y - x <= 1 || x * (y - x - 1) != str.size() - y - 1)
/*if (a + p + t != str.size() || p > 1 || t > 1 || p < t || x * (y - x - 1) != str.size() - y - 1)*/
cout << "NO" << endl;
else
cout << "YES" << endl;
}
return 0;
}
参考代码
#include <stdio.h>
#include <string.h>
int main()
{
char a[105];
int i,j,n,len,P,A,T,x,y;
scanf("%d\n",&n);
for(i=0;i<n;i++)
{
gets(a); //A A P A A T A A A A
//0 1 2 3 4 5 6 7 8 9
// x y
len=strlen(a);//10
P = 0;
A = 0;
T = 0;
x= 0;
y= 0;
for(j=0;j<len;j++)
{
if(a[j]=='P')
{
P++; //1
x= j; //x=2
}
if(a[j]=='A')
A++; //1 2 3 4 5 6 7 8
if(a[j]=='T')
{
T++; //1
y= j; //y=5
}
}
if (P+A+T!=len||y-x<=1||P>1||T>1||x*(y-x-1)!=len-y-1)
//1+8+1=10 5-2<=1 1 1 2*(5-2-1)=4!=10-5-1=4
//没有其他字母||P在T左面||保证只有一个p一个t||保证A的三段关系
printf("NO\n");
else
printf("YES\n");
}
}
————————————————
版权声明:本文为CSDN博主「对音乐倔强的小周」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_44042590/article/details/86133029
1004 成绩排名
以下是自己写的
这段代码14分,丢的6分段错误
段错误1:
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
struct information
{
int scord;
string name;
string num;
};
int comp(const information &a, const information &b)
{
if (a.scord > b.scord) return 1;
return 0;
}
int main()
{
int n;
information student[10000];
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> student[i].name >> student[i].num >> student[i].scord;
}
sort(student+0,student+n,comp);
cout << student[0].name << " " << student[0].num << endl;
cout << student[n - 1].name << " " << student[n - 1].num;
return 0;
}
段错误2:
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
struct information
{
int scord=0;
string name;
string num;
};
information student[10000];
int main()
{
int n;
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> student[i].name >> student[i].num >> student[i].scord;
}
string maxName="", maxNum="", minName="", minNum="";
int maxScord=0, minScord = 200;
for (int i = 0; i < n; i++)
{
if (student[i].scord > maxScord)
{
maxScord = student[i].scord;
maxName = student[i].name;
maxNum = student[i].num;
}
if (student[i].scord < minScord)
{
minScord = student[i].scord;
minName = student[i].name;
minNum = student[i].num;
}
}
cout << maxName << " " << maxNum << endl << minName << " " << minNum;
return 0;
}
段错误3:
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
struct information
{
int scord=0;
string name;
string num;
};
information student[10000];
int main()
{
int n;
int maxScord=0, minScord = 200,posMax=0,posMin=0;
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> student[i].name;
cin >> student[i].num;
cin >> student[i].scord;
}
for (int i = 0; i < n; i++)
{
if (student[i].scord > maxScord)
{
maxScord = student[i].scord;
posMax = i;
}
if (student[i].scord < minScord)
{
minScord = student[i].scord;
posMin = i;
}
}
cout << student[posMax].name << " " << student[posMax].num << endl << student[posMin].name <<" "<< student[posMin].num;
return 0;
}
当大家运行之后会发现其实没有段错误,嘿嘿,这是因为刚开始定义的是
information student[10000];
在经过自己自习的研究后,改成
information student[10000];
就好了。
因为一个段错误,写出了3种方法,浪费了1个小时,不辛苦,命苦。
建议大家上个代码改成
information *student = new Stu[n];
更佳,自个琢磨吧。
以下是参考他人的代码
#include <iostream>
using namespace std;
struct Student{
string name;
string number;
int score;
};
int main()
{
int n;
cin>>n;
Student *s = new Student[n];
int smin=100,smax=0;
int sminnum,smaxnum;
for(int i=0;i<n;i++){
cin>>s[i].name>>s[i].number>>s[i].score;
if(s[i].score<smin){smin=s[i].score; sminnum=i;}
if(s[i].score>smax){smax=s[i].score; smaxnum=i;}
}
cout<<s[smaxnum].name<<" "<<s[smaxnum].number<<endl;
cout<<s[sminnum].name<<" "<<s[sminnum].number<<endl;
return 0;
}
————————————————
版权声明:本文为CSDN博主「望君持之以恒」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/BoyInC0de/article/details/89065844
1007
#include<iostream>
using namespace std;
bool IsPrime(int num) //num为我们要判断的数
{
//for (int i = 2; i < num - 1; i++) //最传统的方式
//for (int i = 2; i < num/2; i++) //只判断一半的方式
for (int i = 2; i*i <= num; i++) //最优化的判断方式
{
if (num % i == 0)
{
return false;
}
}
return true;
}
int main()
{
int n = 0, a[50000] = {0},count=0,count1=0;
cin >> n;
for (int i = 2; i <= n; i++)
{
if (IsPrime(i))
{
a[count] = i;
count++;
}
}
for (int i = 2; i < count; i++)
{
if (a[i] - a[i - 1] == 2)
count1++;
}
cout << count1;
return 0;
}
1008
#include<iostream>
using namespace std;
int main()
{
int n, m, a[105] = {0};
cin >> n >> m;
m = m % n;
for (int i = 1; i <= n; i++)
cin >> a[i];
for (int i = 0; i < m; i++)
{
a[0] = a[n];
for (int j = n; j != 0; j--)
{
a[j] = a[j - 1];
}
}
for (int i = 1; i <= n; i++)
if (i == 1)
cout << a[i];
else
cout <<" "<< a[i];
return 0;
}
几个比较常用的函数
1. 判断素数
bool IsPrime(int num) //num为我们要判断的数
{
//for (int i = 2; i < num - 1; i++) //最传统的方式
//for (int i = 2; i < num/2; i++) //只判断一半的方式
for (int i = 2; i*i <= num; i++) //最优化的判断方式
{
if (num % i == 0)
{
return false;
}
}
return true; //真为素数
}
对于一般题型比较常用
2.判断闰年
bool Leap_year(int y)//判断是否是闰年
{
if (y % 400 == 0)
return true;
if (y % 4 == 0 && y % 100 != 0)
return true;
return false;
}
bool LeapYear(int y)
{
return (y%4==0&&y%100!=0)||(y%400==0);
}
3.求两数的最大公因数
while循环
inline int gcd(int a,int b)
{
int r;
while(b>0)
{
r=a%b;
a=b;
b=r;
}
return a;
}
三目运算符
inline int gcd(int a,int b)
{
return b>0 ? gcd(b,a%b):a;
}