简单模拟
我写的版本
#include<cstdio>
#include<iostream>
using namespace std;
void Cattatz(int &m);
void Cattatz(int &m)
{
if(m%2)
m = (3*m+1)/2;
else
m = m/2;
}
int main()
{
int n;
cin>>n;
int num = 0;
while(n!=1)
{
num++;
Cattatz(n);
}
cout<<num<<endl;
return 0;
}
书上的版本
#include<cstdio>
int main()
{
int n,step = 0;
scanf("%d",&n);
while( n != 1)
{
if(n%2==0) n = n/2;
else n = (3*n + 1)/2;
step++;
}
printf("%d\n",step);
return 0;
}
我写的版本
#include<iostream>
#include<cstring> //memset函数在这个头文件中
using namespace std;
int main()
{
int N;
cin>>N;
int num[100];
memset(num,0,sizeof(num));
for(int i=0;i<N;i++)
{
int a,b;
cin>>a>>b;
num[a] += b;
}
int x,y;
x = 0,y = num[x];
for(int i=1;i<N;i++)
{
if(num[i]>y)
{
x=i;
y=num[i];
}
}
cout<<x<<" "<<y<<endl;
return 0;
}
书上的版本
#include<cstdio>
const int maxn = 100010;
int school[maxn] = {
0};
int main()
{
int n,schID,score;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d%d",&schID,&score);
school[schID] += score;
}
int k=1,MAX=-1;
for(int i=1;i<n;i++)
{
if(school[i]>MAX)
{
MAX=school[i];
k=i;
}
}
printf("%d %d",l,MAX);
return 0;
}
图形输出
我写的版本
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int main()
{
int n;
char a;
cin>>n>>a;
int col = n;
int row = n%2?(n/2+1):(n/2);
int j=1;
while(j<=row)
{
if(j==1 || j==row)
{
for(int num=0;num<n;num++)
cout<<a;
cout<<endl;
j++;
}
else
{
for(int i=0;i<n;i++)
{
if(i==0 || i==n-1)
cout<<a;
else cout<<" ";
}
cout<<endl;
j++;
}
}
return 0;
}
书上的版本
#include<cstdio>
int main()
{
int row,col;
char c;
scanf("%d %c",&col,&c);
if(col %2==1) row = col/2+1;
else row = col/2;
//第一行
for(int i = 0;i<col;i++)
printf("%c",c);
printf("\n");
//第2~n-1行
for(int i=2;i<row;i++)
{
printf("%c",c);
for(int j = 0;j<col-2;j++)
printf(" ");
printf("%c",c);
}
//第row行
for(int i = 0;i<col;i++)
{
printf("%c",c);
}
return 0;
}
日期处理
#include<cstdio>
//平年和闰年每个月的天数
int month[13][2] = {
{
0,0},{
31,31},{
28,29},{
31,31},{
30,30},{
31,31},{
30,30},{
31,31},{
31,31},{
30,30},{
31,31},{
30,30},{
31,31}};
//判断是否是闰年
bool isLeap(int year)
{
return (year%4 == 0 && year%100!=0) || (year % 400 == 0);
}
int main()
{
int time1,y1,m1,d1;
int time2,y2,m2,d2;
while(scanf("%d%d",&time1,&time2)!=EOF)
{
if(time1>time2) //第一个日期比第二个日期大那么交换,方便之后处理
{
int temp = time1;
time1 = time2;
time2 = time1;
}
y1 = time1/10000,m1 = time1%10000/100,d1=time1%100;
y2 = time2/10000,m2 = time2%10000/100,d2=time1%100;
int ans = 1;
while(y1<y2 || m1<m2 || d1<d2)
{
d1++;
if(d1 == month[m1][isLeap(y1)]+1)
{
m1++;
d1=1;
}
if(m1=13)
{
y1++;
m1=1;
}
ans++;
}
printf("%d\n",ans);
}
return 0;
}
进制转换
#include<cstdio>
int main()
{
int a,b,d;
scanf("%d%d%d",&a,&b,&d);
int sum = a+b;
int ans[31],num=0; //ans存放D进制的每一位
do{
ans[num++] = sum%d;
sum /= d;
}while(sum!=0);
for(int i=num-1;i>=0;i--)
{
printf("%d",ans[i]);
}
return 0;
}
字符串处理
gets() 函数的功能是从输入缓冲区中读取一个字符串存储到字符指针变量 str 所指向的内存空间。
#include<cstdio>
#include<cstring>
const int maxn = 256;
//判断字符串str是否是回文串
bool judge(char str[])
{
int len = strlen(str);
for(int i=0;i<len/2;i++)
{
if(str[i]!=str[len-1-i])
return false;
}
return true;
}
int main()
{
char str[maxn];
while(gets(str))
{
bool flag = judge(str);
if(flag==true)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}
#include<cstdio>
#include<cstring>
int main()
{
char str[90];
gets(str);
int len = strlen(str);
int r = 0,h = 0; //r为行,h为列
char ans[90][90]; //ans[0] ~ ans[r]存放着单词
for(int i = 0;i<len;i++)
{
if(str[i] != " ")
{
ans[r][h++] = str[i];
}
else
{
ans[r][h] = '\0';
r++;
h = 0;
}
}
for(int i=r;i>=0;i--)
{
printf("%s",ans[i]);
if(i>0) printf(" ");
}
return 0;
}