卡拉兹(Callatz)猜想:
对任何一个正整数 n,如果它是偶数,那么把它砍掉一半;如果它是奇数,那么把 (3n+1) 砍掉一半。这样一直反复砍下去,最后一定在某一步得到 n=1。卡拉兹在 1950 年的世界数学家大会上公布了这个猜想,传说当时耶鲁大学师生齐动员,拼命想证明这个貌似很傻很天真的命题,结果闹得学生们无心学业,一心只证 (3n+1),以至于有人说这是一个阴谋,卡拉兹是在蓄意延缓美国数学界教学与科研的进展……
我们今天的题目不是证明卡拉兹猜想,而是对给定的任一不超过 1000 的正整数 n,简单地数一下,需要多少步(砍几下)才能得到 n=1?
每个测试输入包含 1 个测试用例,即给出正整数 n 的值。
输出从 n 计算到 1 需要的步数。
3
5
#include
#include
#include
using namespace std;
int main()
{
int n,i=0;
cin>>n;
while(n!=1)
{
if(n%2==0)
{
n=n/2;
++i;
}
else
{
n=(3*n+1)/2;
++i;
}
}
cout< }
读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 10100。
在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。
1234567890987654321123456789
yi san wu
#include
#include
#include
#include
using namespace std;
int main()
{
string s;
cin>>s;
int sum=0,len;
len=s.length();
for(int i=0;s[i];i++)
{
sum=sum+(s[i]-'0');
}
// cout<
string s1[10]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
stringstream ss;
ss<
int len2=s2.length();
int i=0;
for(i=0;i
cout<
cout<
// cout< } 长度问题:length().size(),strlen()使用方法总结:https://blog.csdn.net/z_qifa/article/details/77744482。c/c++ strlen(str)和str.length()和str.size()都可以求字符串长度。其中str.length()和str.size()是用于求string类对象的成员函数 #include sstrram 标准类库的使用方法:https://blog.csdn.net/ns708865818/article/details/53557957。注意将string流的数据赋值给整形变量时候会自动跳过空格。sstream可以将string类型数字转变为int型;istringstram录入数据时候不是像sstram对象使用 << 。而是使用的istringstream对象 .str( s ); “答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于 PAT 的“答案正确”大派送 —— 只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”。 得到“答案正确”的条件是: 现在就请你为 PAT 写一个自动裁判程序,判定哪些字符串是可以获得“答案正确”的。 每个测试输入包含 1 个测试用例。第 1 行给出一个正整数 n (<10),是需要检测的字符串个数。接下来每个字符串占一行,字符串长度不超过 100,且不包含空格。 每个字符串的检测结果占一行,如果该字符串可以获得“答案正确”,则输出 #include map标准库使用方法总结:https://blog.csdn.net/duan19920101/article/details/50617190 #include using namespace std; int main() if(len==3) 其他代码: #include #include #include #include #include using namespace std; int main() 其他代码: #include 明明一模一样,不知道为啥有错 #include using namespace std; bool IsP(int p) 容器里面同一个位置多次push_back不同的值,并不会覆盖之前的值,也不会自动相加或者重复赋值,而是自动组成了二维数组; #include 找对应数字个数的最佳方法如下::本人倾力打造: #include using namespace std; return 0; int sum(int m,int n) 对比错误的while循环做法: int sum(int m,int n) 数字太大只能使用字符串来进行输入;然后使用传统的算数除法方式进行输出 这里需要注意的是凡是要一一对应的地方,优先考虑使用字符串,string来对应。 这字符串转换为整形,整型转换为字符串是关键: https://www.cnblogs.com/wzxwhd/p/6030083.html #include cin输入s和cin.get之类的区别:https://blog.csdn.net/qianhen123/article/details/19088839 #include using namespace std; int main() 只需要保持输出的数字与给定的实例的结果一样,而不必保证变量的值一定是多少 #include using namespace std; } 很大的数字只能使用string来表示。string的常用函数。string字符串转换为整数de 问题 #include using namespace std; return 0; 录入日期数据的时候不需要管那个斜杠杠,直接在scanf函数格式控制字符串里面斜杠就可以了; #include set使用方法。string使用方法;https://blog.csdn.net/liuchuo/article/details/51994502 容器数组的定义实用方法; #include int main(){ 在录入多个点分开的数字,或者多个斜杠的数字,直接在格式控制字符串中写入即可。不同进制数字之间的加减法; int x, y, z; 统计某个数字出现了几次: #include int main(){ // cout< int main() { 保留两位小数这里要注意和0的大小关系;因为这里涉及到最后数据的表示0; #include 常用字符串函数: strcmp(s1,s2)比较:比较ASCII码值,如果长度不同,会以空字符补足不足的部分作比较。 strcpy(s1,"abdc"):字符串拷贝函数是整体将前面字符串覆盖; strupr() :字符串大写 strlwr():字符串小写 scanf()和cin读入字符数组字符串时候,不需要 & 符号,字符串读取到空格截止。输出字符数组对应字符串只需要数组名就可以。 #include #include 分析:使用sscanf和sprintf函数~ #include #include 数字对应字母很好用字符串来解决。本题目确实字母对应数字。该如何解决呢?使用string的 find函数找到下标吗? 这里使用的减去字符A再加1的做法; #include #include 使用容器录入对应数组的方法: #include 本题代码: #include 借鉴这个大神的解答:https://blog.csdn.net/jyfbug/article/details/80244598 特别是辗转相除法。牛掰。 #include #include 这里我觉得问题是输出的方式????这里的输出方式是按下空格后才会。//每一行的输入直接对应每一行的输出,而不用全部输入完 成后一次全部输出 #include #include 这是我喜欢的方法:使用结构体来存颜色信息以及坐标。然后使用容器存储结构体。妙哉妙哉。参考大神:https://blog.csdn.net/qq_22194315/article/details/60470130 使用map来保证字符串和对应的数字一一对应;map使用方法 #include 我觉得这里可以使用数组替代四个参数比较简洁。 #include #include printf(" %04d",ans[i] ); // 注意这里的输出格式 是%04d #include #include #include #include #include #include 稳扎稳打就行。 #include 参见这位大神的:https://blog.csdn.net/weixin_41162823/article/details/79677651 这题有俩个地方很关键,一是整数d属于[0,9],第二个地方就是N<40.这代表着我们并不需要多么复杂的算法优化空间与时间,简单的暴力求解就可以解决。这题和字符串压缩解压类似,从头开始遍历,遇到相同字符时cnt+1,否则就保存已经连续几个相同字符。要注意最后要判断cnt是否大于0,防止字符串从头到尾都相等。
,其中str.size( )得到的字符串长度包含“\0”的长度。strlen(str)是用于求字符数组的长度,其参数是char*。1003 我要通过
P
、 A
、 T
这三种字符,不可以包含其它字符;xPATx
的字符串都可以获得“答案正确”,其中 x
或者是空字符串,或者是仅由字母 A
组成的字符串;aPbTc
是正确的,那么 aPbATca
也是正确的,其中 a
、 b
、 c
均或者是空字符串,或者是仅由字母 A
组成的字符串。输入格式:
输出格式:
YES
,否则输出 NO
。输入样例:
8
PAT
PAAT
AAPATAA
AAPAATAAAA
xPATx
PT
Whatever
APAAATAA
输出样例:
YES
YES
YES
YES
NO
NO
NO
NO
#include 1004 成绩排名
#include
#include
using namespace std;
struct nood{
string s1;
string s2;
int grade;
}stu[1000]; //结构体数组。容器中的元素是结构体时候,必须定义为全局的,否则容器会出错。
bool cmp(nood a,nood b)
{
return a.grade>b.grade; //自定义排序规则,从大到小降序排列;在前面的元素就表示前面的
}
int main()
{
int n;
cin>>n;
for(int i=0;i
cin>>stu[i].s1>>stu[i].s2>>stu[i].grade;
}
sort(stu,stu+n,cmp); //sort排序的区间为前闭后开区间;
cout<
}1005 继续(3n+1)猜想
#include
#include
#include
using namespace std;
int arr[10000];
bool cmp(int a, int b) {return a > b;} //降序排列
int main() {
int k, n, flag = 0;
cin >> k;
vector
for (int i = 0; i < k; i++) {
cin >> n;
v[i] = n;
while (n != 1) {
if (n % 2 != 0)
n = 3 * n + 1;
n = n / 2;
arr[n] = 1; //那个数字出现过那个数字就在数组中标记为1;
}
}
sort(v.begin(), v.end(), cmp); //从大到小排序
for (int i = 0; i < v.size(); i++) {
if (arr[v[i]] == 0) {
if (flag == 1)
cout << " ";
cout << v[i];
flag = 1;
}
}
return 0;
}1006 换个格式输出整数
#include
#include
#include
{
int n;
cin>>n;
stringstream ss;
ss<
// cout< int len=s.length();
// cout<
{
for(int j=(s[0]-'0');j>0;--j)
cout<<"B";
for(int k=(s[1]-'0');k>0;--k)
cout<<"S";
for(int t=1;t<=(s[2]-'0');++t)
cout<
if(len==2)
{
for(int j=(s[0]-'0');j>0;--j)
cout<<"S";
for(int t=1;t<=(s[1]-'0');++t)
cout<
if(len==1)
{
for(int t=1;t<=(s[0]-'0');++t)
cout<
return 0;
}
using namespace std;
int main() {
int a, i = 0;
cin >> a;
int b[3] = {0};
while (a != 0) {
b[i++] = a % 10;
a = a / 10;
}
for (int k = 0; k < b[2]; k++)
cout << "B";
for (int k = 0; k < b[1]; k++)
cout << "S";
for (int k = 0; k < b[0]; k++)
cout << k + 1;
return 0;
}1007 素数对猜想
#include
using namespace std;
bool isprime(int a) {
for (int i = 2; i<= sqrt(a); i++)
if (a % i == 0) return false;
return true;
}
int main() {
int N, cnt = 0;
cin >> N;
for (int i = 5; i <= N; i++)
if (isprime(i-2) && isprime(i)) cnt++;
cout << cnt;
return 0;
}1008 数组元素循环右移
#include
#include
#define maxSize 101
int main(){
int A[maxSize];
int M, N;
scanf("%d%d", &N, &M);
//从控制台中读取N个数
for (int i = 1; i <= N; i++){
scanf("%d",&A[i]);
}
for (int k = 0; k < M; k++){
//最后一位数据保存下来
int temp = A[N];
//逐一的向后移动,该循环执行完后,就是一次右移
for (int j = N; j > 1; j--){
A[j] = A[j - 1];
}
A[1] = temp;
}
//输出数据
for (int i = 1; i <= N; i++){
printf("%d",A[i]);
if (i != N){
printf(" ");
}
}
printf("\n");
system("pause");
return 0;
}
1009 说反话
int main(){
int num = 0; //单词的个数
char ans[80][80];
while(scanf("%s", ans[num]) != EOF){ //一直输入直到文件末尾
num++; //单词的个数加 1
}
for(int i = num - 1; i >= 0; i--){ //倒着输出单词
printf("%s", ans[i]);
if(i > 0) printf(" ");
}
return 0;
} 1010 一元多项式求导
using namespace std;
int main() {
int a, b, flag = 0;
while (cin >> a >> b) {
if (b != 0) {
if (flag == 1)
cout << " ";
cout << a * b << " " << b - 1;
flag = 1;
}
}
if (flag == 0) cout << "0 0";
return 0;
}1011
#include
#include
#include
{
long long int a,b,c;
int t;
cin>>t;
while(t--)
{
cin>>a>>b>>c;
cout<<"Case #"<<(4-t)<<":"<<" ";
if(a+b>c)
cout<<"true";
else
cout<<"false";
cout<
return 0;
}
using namespace std;
int main() {
int n;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
long long int a, b, c;
scanf("%lld%lld%lld", &a, &b, &c);
printf("Case #%d: %s\n", i + 1, a + b > c ? "true" : "false");
}
return 0;
}1013 数素数
#include
#include
#include
bool IsP(int p);
int main()
{
int m,n,k=1,j=0,i=1;
scanf("%d",&m);
scanf("%d",&n);
for(j=2; ;j++)
{
if(IsP(j))
{
if((k>=m)&&(k<=n-1))
{
if((i)%10==0)
{
printf("%d",j);
printf("\n");
}
else
printf("%d ",j); //最主要就是注意最后的一位后面不能有空格
++i;
}
if(k==n)
printf("%d",j);
++k;
}
if(k==n+1)
break;
}
return 0;
}
{
for(int i=2;i*i<=p;i++)
{
if(p%i==0)
return false;
}
return true;
} 1014 福尔摩斯的约会
1015 德才论
#include
#include
using namespace std;
struct node {
int num, de, cai;
};
int cmp(struct node a, struct node b) {
if ((a.de + a.cai) != (b.de + b.cai))
return (a.de + a.cai) > (b.de + b.cai);
else if (a.de != b.de)
return a.de > b.de;
else
return a.num < b.num;
}
int main() {
int n, low, high;
scanf("%d %d %d", &n, &low, &high);
vector
node temp;
int total = n;
for (int i = 0; i < n; i++) {
scanf("%d %d %d", &temp.num, &temp.de, &temp.cai);
if (temp.de < low || temp.cai < low)
total--;
else if (temp.de >= high && temp.cai >= high)
v[0].push_back(temp); //自动组成二维,而不是覆盖赋值
else if (temp.de >= high && temp.cai < high)
v[1].push_back(temp);
else if (temp.de < high && temp.cai < high && temp.de >= temp.cai)
v[2].push_back(temp);
else
v[3].push_back(temp);
}
printf("%d\n", total);
for (int i = 0; i < 4; i++) {
sort(v[i].begin(), v[i].end(), cmp);
for (int j = 0; j < v[i].size(); j++)
printf("%d %d %d\n", v[i][j].num, v[i][j].de, v[i][j].cai); //每一个类型的人存储在在v[i]中,自动组成二维,而不是覆盖赋值
}
return 0;
}1016 部分A+B
#include
#include
#include
int sum(int m,int n);
int main()
{
int a,a1,b,b1,pa=0,pb=0;
cin>>a>>a1>>b>>b1;
for(int i=0;i
pa=pa*10+a1;
}
// cout<
pb=pb*10+b1;
}
// cout<
}
{
int t=0;
stringstream ss;
ss<
int len=s1.length();
for(int i=0;i
if(s1[i]-'0'==n)
++t;
}
return t;
}
{
int t=0;
while(m%10>0)
{
if(m%10==n)
++t;
m/=10;
}
return t;
}1017 A除以B
#include
using namespace std;
int main() {
string s;
int a, t = 0, temp = 0;
cin >> s >> a;
int len = s.length();
t = (s[0] - '0') / a;
if ((t != 0 && len > 1) || len == 1)
cout << t;
temp = (s[0] - '0') % a;
for (int i = 1; i < len; i++) {
t = (temp * 10 + s[i] - '0') / a;
cout << t;
temp = (temp * 10 + s[i] - '0') % a;
}
cout << " " << temp;
return 0;
}1018 锤子剪刀布 ???
#include
using namespace std;
int main() {
int n;
cin >> n;
int jiawin = 0, yiwin = 0;
int jia[3] = {0}, yi[3] = {0};
for (int i = 0; i < n; i++) {
char s, t;
cin >> s >> t;
if (s == 'B' && t == 'C') {
jiawin++;
jia[0]++;
} else if (s == 'B' && t == 'J') {
yiwin++;
yi[2]++;
} else if (s == 'C' && t == 'B') {
yiwin++;
yi[0]++;
} else if (s == 'C' && t == 'J') {
jiawin++;
jia[1]++;
} else if (s == 'J' && t == 'B') {
jiawin++;
jia[2]++;
} else if (s == 'J' && t == 'C') {
yiwin++;
yi[1]++;
}
}
cout << jiawin << " " << n - jiawin - yiwin << " " << yiwin << endl << yiwin << " " << n - jiawin - yiwin << " " << jiawin << endl;
int maxjia = jia[0] >= jia[1] ? 0 : 1;
maxjia = jia[maxjia] >= jia[2] ? maxjia : 2;
int maxyi = yi[0] >= yi[1] ? 0 : 1;
maxyi = yi[maxyi] >= yi[2] ? maxyi : 2;
char str[4] = {"BCJ"}; //使用string来解决对应的问题;
cout << str[maxjia] << " " << str[maxyi];
return 0;
}1019 数字黑洞
1020 月饼
#include
#include
using namespace std;
struct mooncake{
float mount, price, unit;
};
int cmp(mooncake a, mooncake b) {
return a.unit > b.unit;
}
int main() {
int n, need;
cin >> n >> need;
vector
for (int i = 0; i < n; i++) scanf("%f", &a[i].mount);
for (int i = 0; i < n; i++) scanf("%f", &a[i].price);
for (int i = 0; i < n; i++) a[i].unit = a[i].price / a[i].mount;
sort(a.begin(), a.end(), cmp);
float result = 0.0;
for (int i = 0; i < n; i++) {
if (a[i].mount <= need) {
result = result + a[i].price;
} else {
result = result + a[i].unit * need;
break;
}
need = need - a[i].mount;
}
printf("%.2f",result);
return 0;
}1021 个位数统计
{
string s;
cin>>s;
int len=s.length();
int a[10] = {0};
for(int i=0;i
a[s[i]-'0']++;
}
for(int j=0;j<10;j++)
{
// cout< if(a[j]!=0)
cout<
return 0;
}1022 D进制的A+B
#include
// int rev(int m,int n);
int main()
{
unsigned int a,b,d,sum;
cin>>a>>b>>d;
sum=a+b;
if (sum == 0) {
cout << 0;
return 0;
}
vector
while(sum>0)
{
p.push_back(sum%d);
sum/=d;
}
int len=p.size();
// cout<
for(int i=len-1;i>=0;i--)
{
cout<
return 0;
}1023 组个最小数 ???
#include
using namespace std;
int main() {
int a[10], t;
for (int i = 0; i < 10; i++)
cin >> a[i];
for (int i = 1; i < 10; i++) {
if (a[i] != 0)
{
cout << i; //得到最高位的数
t = i;
break;
}
}
for (int i = 0; i < a[0]; i++)
cout << 0; //输出0
for (int i = 0; i < a[t] - 1; i++)
cout << t; //输出最高位对应数字没有提到前面的数
for (int i = t + 1; i < 10; i++)
for (int k = 0; k < a[i]; k++)
cout << i; //依次输出其他位的数
return 0;
}1024 科学计数法
#include
using namespace std;
int main() {
string s;
cin >> s;
int i = 0;
while (s[i] != 'E') i++;
string t = s.substr(1, i-1);
int n = stoi(s.substr(i+1));
if (s[0] == '-') cout << "-";
if (n < 0) {
cout << "0.";
for (int j = 0; j < abs(n) - 1; j++) cout << '0';
for (int j = 0; j < t.length(); j++)
if (t[j] != '.') cout << t[j];
} else {
cout << t[0];
int cnt, j;
for (j = 2, cnt = 0; j < t.length() && cnt < n; j++, cnt++) cout << t[j];
if (j == t.length()) {
for (int k = 0; k < n - cnt; k++) cout << '0';
} else {
cout << '.';
for (int k = j; k < t.length(); k++) cout << t[k];
}
}
return 0;
}1027 打印沙漏
#include
int rev(int m,int n);
int main()
{
int n;
char b;
cin>>n;
cin>>b;
int hang=0,sum=1,sum1;
//找出行数
for(hang=1; ;hang++)
{
sum=sum+(2*hang+1)*2;
if(sum>n)
{
hang=hang-1;
break;
}
}
// cout<
//打印上半部分
for(int j=hang;j>0;j--)
{
for(int t=0;t
if(t!=0)
cout<<" ";
}
for(int t=0;t<2*j+1;t++)
{
cout< }
cout<
//打印中间
for(int j=hang;j>0;j--)
{
cout<<" ";
}
cout< //打印下半部分
for(int j=1;j<=hang;j++)
{
for(int t=0;t<=hang-j;t++)
{
if(t!=0)
cout<<" ";
}
for(int t=0;t<2*j+1;t++)
{
cout< }
cout<
sum=1;
for(int t=1;t<=hang;t++)
{
sum=sum+(2*t+1)*2;
}
cout<<(n-sum);
// cout<
// cout<<(19-a[i+1]);
// 2 1
// 1 3
// 0 5
//
// 0 1
// 1 7 2*(2*2+1)
// 2 17 2*(2*3+1) //不用去计算数学公式,使用基本的关系,程序方法来解决
// 3 31 2*(2*4+1)
// 4 49
// cout<
}1028 人口普查
using namespace std;
int main() {
int n;
cin >> n;
string name;
int year, month, day, count = 0;
int maxyear = 0, maxmonth = 0, maxday = 0, minyear = 9999, minmonth = 9999, minday = 9999;
string maxname, minname;
for (int i = 0; i < n; i++) {
cin >> name;
scanf("%d/%d/%d",&year, &month, &day);
if((year < 2014 || (year == 2014 && month < 9) || (year == 2014 && month == 9 && day <= 6)) &&
(year > 1814 || (year == 1814 && month > 9) || (year == 1814 && month == 9 && day >= 6))) {
count++;
if(year > maxyear || (year == maxyear && month > maxmonth) || (year == maxyear && month == maxmonth && day > maxday)) {
maxyear = year;
maxmonth = month;
maxday = day;
maxname = name;
}
if(year < minyear || (year == minyear && month < minmonth) || (year == minyear && month == minmonth && day < minday)) {
minyear = year;
minmonth = month;
minday = day;
minname = name;
}
}
}
cout << count;
if (count != 0)
cout << " " << minname << " " << maxname; //先输出一个数字,然后一个空格,一个数字的输出,这样避免判断是否要输 //出空格。
return 0;
}
1029 旧键盘 ???1036 跟奥巴马一起学编程
#include
#include
#include
using namespace std;
int n,t;
char c;
cin>>n;
cin>>c;
t=(int)((double)n/2+0.5);
vector
for(int i=0;i
for(int j=0;j
v[i].push_back(c); //容器数组加入对应值得方法
}
}
for(int i=1;i
for(int j=1;j
v[i][j]=' '; //容器数组有对应的值后赋值的方法;
}
}
for(int i=0;i
for(int j=0;j
cout<
cout<
return 0;
} 1037 在霍格沃茨找零钱
#include
using namespace std;
int main() {
int a, b ,c;
int m, n, t;
scanf("%d.%d.%d",&a, &b, &c); //录入带点 . 的数字
scanf("%d.%d.%d",&m, &n, &t);
int flag;
if (a > m ||(a == m && b > n) ||(a == m && b == n && c > t))
flag = 0;
else
flag = 1;
if (flag == 1) {
if (t >= c) {
z = t - c;
} else {
z = t + 29 - c;
n = n - 1;
}
if (n >= b) {
y = n - b;
} else {
y = n + 17 - b;
m = m - 1;
}
x = m - a;
cout << x << "." << y << "." << z;
} else {
if (c >= t) {
z = c - t;
} else {
z = c + 29 - t;
b = b - 1;
}
if (b >= n) {
y = b - n;
} else {
y = b + 17 - n;
a = a - 1;
}
x = a - m;
cout << "-" << x << "." << y << "." << z;
}
return 0;
}1038 统计同成绩学生
#include
#include
#include
using namespace std;
int n,k,a[100000],b[101]={0};
cin>>n;
for(int i=0;i
cin>>a[i];
b[a[i]]++;
}
// cout<
cin>>k;
int t[k];
for(int i=0;i
cin>>t[i];
}
cout< for(int i=1;i
cout<<" "< }
return 0;
} 1046 划拳
#include
using namespace std;
int jiahan, jiahua, yihan, yihua;
int n;
int jia = 0;
int yi = 0;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> jiahan >> jiahua >> yihan >> yihua;
if (jiahan + yihan == jiahua && yihan + jiahan != yihua) //注意排除这种情况即可
yi++;
if (jiahan + yihan != jiahua && yihan + jiahan == yihua)
jia++;
}
cout << jia << " " << yi;
return 0;
}1047 编程团体赛
#include
using namespace std;
int main() {
int n, t, num, score;
cin >> n;
int team[1001] = {0};
for (int i = 1; i <= n; i++) {
scanf("%d-%d %d", &t, &num, &score); //核心,这里录入数据的时候注意直接在格式控制字符串中写入横杠 -
team[t] += score;
}
int max = 0;
for (int i = 0; i < 1001; i++) {
if (team[max] < team[i])
max = i;
}
cout << max << " " << team[max];
return 0;
}1048 数字加密
#include
#include
using namespace std;
int main() {
string a, b;
cin>>a>>b;
char str[13] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'J', 'Q', 'K'}; //涉及到字符对应数字,所以使用字符数组,直接初始化完成;
int l1, l2, l, i, m, d;
l1 = a.length();
l2 = b.length();
if (l2 < l1) {
d = l1 - l2;
for (i=0; i
}
if (l1 < l2) {
d = l2 - l1;
for (i=0; i
l1 = l2;
}
for (i=0; i
b[l1-1-i] = str[m];
}
for (i=1; i
b[l1-1-i] = str[(m + 10) % 10];
}
cout< return 0;
}1049 数列的片段求和
#include
using namespace std;
int main() {
int n;
cin >> n;
double a[100001];
double sum = 0.0;
for (int i = 1; i <= n; i++) {
cin >> a[i];
sum = sum + a[i] * i * (n - i + 1); //牛掰了,这里的权重就是每一个数总的会被加的次数可以直接这样表示
}
printf("%.2f", sum);
return 0;
}1051 复数乘法
#include
using namespace std;
int main() {
double r1, p1, r2, p2, A, B;
cin >> r1 >> p1 >> r2 >> p2;
A = r1 * r2 * cos(p1) * cos(p2) - r1 * r2 * sin(p1) * sin(p2);
B = r1 * r2 * cos(p1) * sin(p2) + r1 * r2 * sin(p1) * cos(p2);
if (A + 0.005 >= 0 && A < 0)
printf("0.00"); //特别注意这里和0比大小的地方。考虑这里为什么使用的0.05
else
printf("%.2f", A);
if(B >= 0)
printf("+%.2fi", B);
else if (B + 0.005 >= 0 && B < 0)
printf("+0.00i");
else
printf("%.2fi", B);
return 0;
}1052 卖个萌 ????
string常用函数的使用方法以及string的录入方法;在VS2010中头文件有的版本不能使用cstring,只能使用string,否则出错。字符数组输出时候只需要数组名就可以输出这个字符串。
#include
using namespace std;
int main() {
vector
for(int i = 0; i < 3; i++) {
string s;
getline(cin, s);
vector
int j = 0, k = 0;
while(j < s.length()) {
if(s[j] == '[') {
while(k++ < s.length()) {
if(s[k] == ']') {
row.push_back(s.substr(j+1, k-j-1));
break;
}
}
}
j++;
}
v.push_back(row);
}
int n;
cin >> n;
for(int i = 0; i < n; i++) {
int a, b, c, d, e;
cin >> a >> b >> c >> d >> e;
if(a > v[0].size() || b > v[1].size() || c > v[2].size() || d > v[1].size() || e > v[0].size() || a < 1 || b < 1 || c < 1 || d < 1 || e < 1) {
cout << "Are you kidding me? @\\/@" << endl;
continue;
}
cout << v[0][a-1] << "(" << v[1][b-1] << v[2][c-1] << v[1][d-1] << ")" << v[0][e-1] << endl;
}
return 0;
}1053 住房空置率
using namespace std;
int main() {
int n, d, k, maybe = 0, must = 0;
double e, temp;
cin >> n >> e >> d;
for (int i = 0; i < n; i++) {
cin >> k;
int sum = 0;
for (int j = 0; j < k; j++) {
cin >> temp;
if (temp < e) sum++;
}
if(sum > (k / 2)) {
k > d ? must++ : maybe++; //三目表达式。? :
}
}
double mayberesult = (double)maybe / n * 100; //百分数表达方法
double mustresult = (double)must / n * 100;
printf("%.1f%% %.1f%%", mayberesult, mustresult); //百分数表达方法
return 0;
}1054 求平均值
sscanf() – 从一个字符串中读进与指定格式相符的数据
sprintf() – 字符串格式化命令,主要功能是把格式化的数据写入某个字符串中
#include
#include
using namespace std;
int main() {
int n, cnt = 0;
char a[50], b[50];
double temp, sum = 0.0;
cin >> n;
for(int i = 0; i < n; i++) {
scanf("%s", a);
sscanf(a, "%lf", &temp);
sprintf(b, "%.2lf",temp);
int flag = 0;
for(int j = 0; j < strlen(a); j++) {
if(a[j] != b[j]) {
flag = 1;
}
}
if(flag || temp < -1000 || temp > 1000) {
printf("ERROR: %s is not a legal number\n", a);
continue;
} else {
sum += temp;
cnt++;
}
}
if(cnt == 1) {
printf("The average of 1 number is %.2lf", sum);
} else if(cnt > 1) {
printf("The average of %d numbers is %.2lf", cnt, sum / cnt);
} else {
printf("The average of 0 numbers is Undefined");
}
return 0;
}1056 组合数的和
#include
using namespace std;
int main() {
int n, ans = 0;
scanf("%d", &n);
vector
for(int i = 0; i < n; i++) scanf("%d", &v[i]);
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
if(i != j) ans += v[i] * 10 + v[j]; //简直给力,这样就避免了需要顺反来两次的循环,直接通过两个for解决
}
}
printf("%d", ans);
return 0;
}1057 数零壹
#include
#include
using namespace std;
int main() {
string s;
getline(cin, s);
int n = 0;
for(int i = 0; i < s.length(); i++) {
if(isalpha(s[i])) {
s[i] = toupper(s[i]); //注意字符串的大小写转换
n += (s[i] - 'A' + 1);
}
}
int cnt0 = 0, cnt1 = 0;
while(n != 0) {
if(n % 2 == 0) {
cnt0++;
} else {
cnt1++;
}
n = n / 2;
}
printf("%d %d", cnt0, cnt1);
return 0;
}1058 选择题 ???
1059 C语言竞赛
#include
#include
using namespace std;
int ran[10000];
bool isprime(int a) {
if(a <= 1) return false;
int Sqrt = sqrt((double)a);
for(int i = 2; i <= Sqrt; i++) {
if(a % i == 0)
return false;
}
return true;
}
int main() {
int n, k;
scanf("%d", &n);
for(int i = 0; i < n; i++) {
int id;
scanf("%d", &id);
ran[id] = i + 1; //由于可以确定ID是不同的,所以这样设置数组最方便
}
scanf("%d", &k);
set
for(int i = 0; i < k; i++) {
int id;
scanf("%d", &id);
printf("%04d: ", id);
if(ran[id] == 0) {
printf("Are you kidding?\n");
continue;
}
if(ss.find(id) == ss.end()) {
ss.insert(id);
} else {
printf("Checked\n");
continue;
}
if(ran[id] == 1) {
printf("Mystery Award\n");
}else if(isprime(ran[id])) {
printf("Minion\n");
}else {
printf("Chocolate\n");
}
}
return 0;
}1061 判断题
#include
#include
using namespace std;
int main() {
int n,d,temp;
cin>>n>>d;
vector
for(int i=0;i<2;i++)
{
for(int j=0;j
cin>>temp;
v[i].push_back(temp); //容器数组形式则每一次向容器里面添加数据可以使用中括号的数组形式v[i]。
}
}
for(int i=0;i
for(int j=0;j
cin>>temp;
vv[i].push_back(temp);
}
}
// for(int i=0;i<2;i++)
// {
// for(int j=0;j
// cout<
// cout<
//
return 0;
}
#include
using namespace std;
int main() {
int n, m;
scanf("%d%d", &n, &m);
vector
for(int i = 0; i < m; i++)
scanf("%d", &score[i]);
for(int i = 0; i < m; i++)
scanf("%d", &ans[i]);
for(int i = 0; i < n; i++) {
int total = 0;
for(int j = 0; j < m; j++) {
int temp;
scanf("%d", &temp);
if(temp == ans[j])
total += score[j];
}
printf("%d\n", total);
}
return 0;
}1062 最简分数 ???
#include
#define N 1000
int judge(int a, int b);
int main()
{
int a[1000] = { 0 };
int i, j;
double N1, M1, N2, M2,K;
double temp;
scanf("%lf/%lf %lf/%lf %lf", &N1, &M1, &N2, &M2,&K); //分数录入的斜杠在格式控制字符串中。
if (N1*M2 > N2*M1) //b1
temp = N1;
N1 = N2;
N2 = temp;
temp = M1;
M1 = M2;
M2 = temp;
}
j = 0;
for (i=0;; i++)
{
if (i *M1>K*N1&&i *M2
if (judge(i, K) == 1) //使用辗转相除法计算后,若果无公因子,则b就会等于1;
{
a[j] = i; //存 储 这样的a[i];
j++;
}
}
else if(i *M2>K*N2)//超出范围
{
break;
}
}
for (i = 0; i < j - 1; i++) //这里是为了避免 最后多输出空格。
{
printf("%d/%.0f ", a[i], K);
}
printf("%d/%.0f", a[i], K);
return 0;
}
int judge(int a, int b) //辗转相除法。b就是最后的公约数。如果b等于1。则说明没有公约数。无法继续约分。
{
int c;
while (a != 0)
{
c = b%a;
b = a;
a = c;
}
return b;
}1063 计算谱半径
#include
using namespace std;
int main() {
int n;
scanf("%d", &n);
float max = 0;
for(int i = 0; i < n; i++) {
float a, b, ans;
scanf("%f%f", &a, &b);
ans = sqrt(a * a + b * b); //数学函数头文件。cmath
max = ans > max ? ans : max; //三目表达式。
}
printf("%.2f", max);
return 0;
}1064 朋友数
#include
using namespace std;
int getFriendNum(int num) {
int sum = 0;
while(num != 0) {
sum += num % 10;
num /= 10;
}
return sum;
}
int main() {
set
int n, num;
scanf("%d", &n);
for(int i = 0; i < n; i++) {
scanf("%d", &num);
s.insert(getFriendNum(num));
}
printf("%d\n", s.size());
for(auto it = s.begin(); it != s.end(); it++) {
if(it != s.begin()) printf(" ");
printf("%d", *it);
}
return 0;
}1066 图像过滤
using namespace std;
int main() {
int m, n, a, b, num, temp;
scanf("%d%d%d%d%d", &m, &n, &a, &b, &num);
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
scanf("%d", &temp);
if (temp >= a && temp <= b)
temp = num;
if (j != 0) printf(" ");
printf("%03d", temp); //间隔输入空格的一个好方法。
}
printf("\n");
}
return 0;
}1067 试密码 ???
using namespace std;
int main() {
string password, temp;
int n, cnt = 0;
cin >> password >> n;
getchar();
while(1) {
getline(cin, temp); //字符串的输入。???
if (temp == "#") break;
cnt++;
if (cnt <= n && temp == password) {
cout << "Welcome in";
break;
} else if (cnt <= n && temp != password) {
cout << "Wrong password: " << temp << endl; //每一行的输入直接对应每一行的输出,而不用全部输入完 //成后一次全部输出
if (cnt == n) {
cout << "Account locked";
break;
}
}
}
return 0;
}1068 万绿丛中一点红
#include
#include
#include
using namespace std;
struct Node
{
int x, y, color;
}node;
int M, N, TOL;
const int maxn = 1000+10;
int a[maxn][maxn];
int cnt[1 << 24] = { 0 };
int dx[] = { -1,-1,-1,0,0,1,1,1 };
int dy[] = { 1,0,-1,1,-1,1,0,-1 };
bool check(int x, int y)
{
if (x < 0 || y < 0 || x >= N || y >= M)
return false;
return true;
}
int main()
{
scanf("%d%d%d", &M, &N,&TOL);
vector
for (int i = 0; i < N; i++)
{
for (int j = 0; j < M; j++)
{
scanf("%d", &a[i][j]);
cnt[a[i][j]]++;
}
}
for (int i = 0; i < N; i++)
{
for (int j = 0; j < M; j++)
{
if (cnt[a[i][j]]==1)//注意独一无二!!!!
{
bool flag = false;
for (int k = 0; k < 8; k++)
{
if (check(i + dx[k], j + dy[k])&&
abs(a[i + dx[k]][j + dy[k]]
- a[i][j]) <= TOL)//注意不要只在内圈中扫描而是应该扫描所有像素
{
flag = true; break;
}
}
if (!flag)
{
node.x = j + 1; node.y = i + 1;
node.color = a[i][j];
v.push_back(node);
}
}
}
}
if (v.size() == 1)
{
printf("(%d, %d): %d", v[0].x, v[0].y, v[0].color);
}
else if (v.size() == 0)printf("Not Exist");
else printf("Not Unique");
return 0;
}1069 微博转发抽奖????
#include 1071 小赌怡情
using namespace std;
int main() {
int T = 0, K = 0, n1 = 0, n2 = 0, b = 0, t = 0;
scanf("%d %d", &T, &K);
for (int i = 0; i < K; i++) {
scanf("%d %d %d %d", &n1, &b, &t, &n2);
if (T == 0) {
printf("Game Over.\n");
return 0;
} else if (t > T) {
printf("Not enough tokens. Total = %d.\n", T);
} else if (n2 > n1) {
if (b == 1) {
T += t;
printf("Win %d! Total = %d.\n", t, T);
} else {
T -= t;
printf("Lose %d. Total = %d.\n", t, T);
}
} else if (n2 < n1) {
if (b == 1) {
T -= t;
printf("Lose %d. Total = %d.\n", t, T);
} else {
T += t;
printf("Win %d! Total = %d.\n", t, T);
}
}
}
return 0;
}1072 开学寄语
#include
#include
using namespace std;
string stu[1005];
int main()
{
int N,M,K;
int find[15],thing[15],ans[15];
cin>>N>>M;
for (int i=0;i
}
int count1=0,count2=0;
for (int i=0;i
cin>>K;
if (K==0) {
continue;
}
int p=0,flag=0;
for (int j=0;j
for (int k=0;k
count2++;
flag=1;
ans[p++]=thing[j];
}
}
}
if(flag) {
count1++;
cout<
}
cout<
}
cout<
}
1073 多选题常见计分法
#include
#include
using namespace std;
int main() {
int n = 0, m = 0, opt_num = 0, true_opt_num = 0, temp = 0, max_error_cnt = 0;
int hash[] = {1, 2, 4, 8, 16}, opt[1010][110] = {0};
char c;
scanf("%d %d", &n, &m);
vector
vector
for (int i = 0; i < m; i++) {
scanf("%d %d %d", &full_score[i], &opt_num, &true_opt_num);
for (int j = 0; j < true_opt_num; j++) {
scanf(" %c", &c);
true_opt[i] += hash[c-'a'];
}
fre[i].resize(5); //容器的resize()用法;
}
for (int i = 0; i < n; i++) {
double grade = 0;
for (int j = 0; j < m; j++) {
getchar();
getchar(); // '('
scanf("%d", &temp);
for (int k = 0; k < temp; k++) {
scanf(" %c", &c);
opt[i][j] += hash[c-'a'];
}
getchar(); // ')'
int el = opt[i][j] ^ true_opt[j];
if (el) {
if ((opt[i][j] | true_opt[j]) == true_opt[j]) {
grade += full_score[j] * 1.0 / 2;
}
if (el) {
if (el & hash[0]) fre[j][0]++; // a
if (el & hash[1]) fre[j][1]++; // b
if (el & hash[2]) fre[j][2]++; // c
if (el & hash[3]) fre[j][3]++; // d
if (el & hash[4]) fre[j][4]++; // e
}
} else
grade += full_score[j];
}
printf("%.1f\n", grade);
}
for (int i = 0; i < m; i++)
for (int j = 0; j < 5; j++)
max_error_cnt = max_error_cnt > fre[i][j] ? max_error_cnt : fre[i][j];
if (max_error_cnt == 0) {
printf("Too simple\n");
} else {
for (int i = 0; i < m; i++) {
for (int j = 0; j < fre[i].size(); j++) {
if (max_error_cnt == fre[i][j]) {
printf("%d %d-%c\n", max_error_cnt, i+1, 'a'+j);
}
}
}
}
return 0;
}1074 宇宙无敌加法器
using namespace std;
int main() {
string s, s1, s2, ans;
int carry = 0, flag = 0;
cin >> s >> s1 >> s2;
ans = s;
string ss1(s.length() - s1.length(), '0'); //这里就是为了标准化相加的数据。小于金制表位数的补0在前面。和那个哈里 //波特货币转换的一样
s1 = ss1 + s1;
string ss2(s.length() - s2.length(), '0');
s2 = ss2 + s2;
for(int i = s.length() - 1; i >= 0; i--) {
int mod = s[i] == '0' ? 10 : (s[i] - '0');
ans[i] = (s1[i] - '0' + s2[i] - '0' + carry) % mod + '0';
carry = (s1[i] - '0' + s2[i] - '0' + carry) / mod;
}
if (carry != 0) ans = '1' + ans;
for(int i = 0; i < ans.size(); i++) {
if (ans[i] != '0' || flag == 1) {
flag = 1;
cout << ans[i];
}
}
if (flag == 0) cout << 0;
return 0;
}1076 wifi密码
#include
#include
using namespace std;
int main(){
int n;
// freopen("input.txt","r",stdin);
char answer,ch;
scanf("%d",&n);
getchar();
for(int i = 0;i < n;i++){
for(int j = 0;j < 4;j++){
scanf("%c-%c",&answer,&ch); //输入数据直接在格式控制字符串中完成格式问题。
getchar();
if(ch=='T'){
printf("%d",answer-'A'+1); //重点注意26个字母和对应的数字进行转换的方法;
}
}
}
printf("\n");
return 0;
}
1077 互评成绩计算
using namespace std;
int main() {
int n, m;
cin >> n >> m;
for (int i = 0; i < n; i++) {
int g2, g1 = 0, cnt = -2, temp, maxn = -1, minn = m + 1;
cin >> g2;
for (int j = 0; j < n-1; j++) {
cin >> temp;
if (temp >= 0 && temp <= m) {
if (temp > maxn) maxn = temp; //找出最大值。
if (temp < minn) minn = temp; //找出最小值
g1 += temp; //找出总分
cnt++; //找出合法输入的个数
}
}
cout << int((((g1 - minn - maxn) * 1.0 / cnt) + g2) / 2 + 0.5) << endl; //结果四舍五入
}
return 0;
}1078 字符串压缩与解压
#include
using namespace std;
int main(){
char type;
string str;
// freopen("input.txt","r",stdin);
scanf("%c",&type);
getchar();
getline(cin,str);
if(type == 'C')
{
int len = str.size();
int cnt = 1;
for(int i = 0;i < len;i++)
{
if(str[i] == str[i+1])
{
cnt++;
}
else
{
if(cnt>1)
{
printf("%d",cnt); //注意这里的输出方式。按照代码,虽然字符没有输入完毕就进行输出,会导致结果不是 //一行一行输出。但是由于回车之后才算是输入结束。所以不会出现这种情况;
}
printf("%c",str[i]);
cnt = 1;
}
}
}
else{
int len = str.size();
int cnt = 0;
for(int i = 0;i < len;i++){
if(str[i]<='9'&&str[i]>='0')
{
cnt*=10;
cnt+=str[i]-'0';
}
else
{
if(cnt == 0){
printf("%c",str[i]);
}else
for(int j = 0;j < cnt;j++){
printf("%c",str[i]);
}
cnt = 0;
}
}
}
return 0;
}
1081 检查密码
#include
using namespace std;
int main() {
int n;
cin >> n; getchar();
for (int i = 0; i < n; i++)
{
string s;
getline(cin, s);
if (s.length() >= 6)
{
int invalid = 0, hasAlpha = 0, hasNum = 0;
for (int j = 0; j < s.length(); j++)
{
if (s[j] != '.' && !isalnum(s[j])) //重点注意这几个函数isalnum(),isalpha()和isdigit() 的使用。
invalid = 1;
else if
(isalpha(s[j])) hasAlpha = 1;
else if
(isdigit(s[j])) hasNum = 1;
}
if (invalid == 1)
cout << "Your password is tai luan le.\n";
else if(hasNum == 0)
cout << "Your password needs shu zi.\n";
else if(hasAlpha == 0)
cout << "Your password needs zi mu.\n";
else
cout << "Your password is wan mei.\n";
}
else
cout << "Your password is tai duan le.\n";
}
return 0;
}1082 射击比赛
#include
#include
using namespace std;
int main()
{
int N,x,y,distance,max=-1,min=0;
string id,maxID,minID;
cin >> N;
for(int i=1;i<=N;i++)
{
cin>>id>>x>>y;
distance = x*x + y*y;//两点距离公式
if(distance>max)
{//找冠军
max = distance;
maxID = id;
}
if(distance
min = distance;
minID = id;
}
}
cout<
return 0;
}1083 是否存在相等的差
using namespace std;
int main() {
int n, t, a[10000] = {0};
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> t;
a[abs(t-i)]++; /这个方法666,激不激动开不开心
}
for (int i = 9999; i >= 0; i--)
if (a[i] >= 2) cout << i << " " << a[i] << endl;
return 0;
}1084 外观数列
#include
using namespace std;
int main()
{
string a;
int n;
cin >> a >> n;
while(--n)
{
string ans;
char c = a[0];
int cnt = 0;
for(int i = 0;i < a.length();i++)
{
if(a[i] == c)
cnt++; //记录有几个字符c;
else
{
ans+=c;
ans+=cnt+'0';
c = a[i];
cnt = 1;
}
}
if(cnt > 0)
{
ans+=c; //首先把字符c加入空字符串
ans+=cnt+'0'; //将cut+'0'变为字符型常量加入字符串ans中。
}
a = ans;
}
cout << a <
}