#include
int main()
{
printf("YES\n");
return 0;
}
利用桶排,计算出现过的每一个字符的个数。最后用一个for循环遍历所有出现过的字符,求出ascii值与出现次数乘积最大的那一个字符。
#include
#include
int main()
{
int num[1000];
char s[600];
while(scanf("%s",s)!=EOF)
{
int ma=-1,l=strlen(s);
memset(num,0,sizeof(num));
for(int i=0;ima)
ma=num[s[i]]*s[i];
}
printf("%d\n",ma);
}
return 0;
}
利用结构体存放每一个出现过的字符的:字符、位置、ascii值,然后用sort排序直接排序即可。
#include
#include
using namespace std;
struct node
{
char c;
int num;
int asc;
}a[10004];
bool cmp(node x,node y)
{
if(x.asc==y.asc)
return x.num='A'&&s[i]<='Z')
a[i].asc=s[i]-'A';
else
a[i].asc=s[i]-'a';
}
sort(a,a+n,cmp);
printf("%d",a[0].num);
for(int i=1;i
注意,我们要将文件结束前的所有物体的总价全部相加,当文件结束后,输出答案。
#include
int main()
{
char s[100];
double a,b,sum=0;
while(scanf("%s %lf %lf",s,&a,&b)!=EOF)
sum+=a*b;
printf("%.1f\n",sum);
return 0;
}
每一个数字都有他们的特点,找出这个特点,并利用这个特点判断它的值应该是多少,然后进行a+b,输出答案即可。
这个代码是先计算出每一个数字的‘#’有多少个,如果有相同个数的‘#’号,再根据他们的特定的点来判断他们的值。
每一个数字对应的‘#’号的个数如下:
##### ....# ##### ##### # . . .# ##### ##### ##### ##### ##### . . . . . . . . . .
# . . .# ....# . . . . # . . . . # # . . .# # . . . . # . . . . . . . .# # . . .# # . . .# . . #. . . . . . .
# . . .# ....# . . . . # . . . . # # . . .# # . . . . # . . . . . . . .# # . . .# # . . .# . . #. . . . . . .
# . . .# ....# ##### ##### ##### ##### ##### . . . .# ##### ##### ##### #####
# . . .# ....# # . . . . . . . . # . . . .# . . . .# # . . .# . . . .# # . . .# . . . .# . . #. . . . . . .
# . . .# ....# # . . . . . . . . # . . . .# . . . .# # . . .# . . . .# # . . .# . . . .# . . #. . . . . . .
##### ....# ##### ##### . . . .# ##### ##### . . . .# ##### ##### . . . . . . . . . .
20 7 19 19 14 19 21 11 23 21 9 5
#include
int main()
{
int t,a,b,sum,flag;
char s[7][20];
scanf("%d",&t);
while(t--)
{
sum=0,flag=0;
for(int i=0; i<7; i++)
scanf("%s",s[i]);
for(int i=0; i<7; i++)
{
for(int j=0; j<5; j++)
{
if(s[i][j]=='#')
sum++;
}
}
if(sum==20)
a=0;
else if(sum==7)
a=1;
else if(sum==19)
{
if(s[1][4]=='#'&&s[4][0]=='#')
a=2;
else if(s[1][4]=='#'&&s[4][4]=='#')
a=3;
else
a=5;
}
else if(sum==14)
a=4;
else if(sum==21)
{
if(s[4][0]=='#')
a=6;
else
a=9;
}
else if(sum==11)
a=7;
else
a=8;
sum=0;
for(int i=0; i<7; i++)
{
for(int j=6; j<11; j++)
if(s[i][j]=='#')
sum++;
}
if(sum==9)
flag=1;
sum=0;
for(int i=0; i<7; i++)
{
for(int j=11; j<17; j++)
if(s[i][j]=='#')
sum++;
}
if(sum==20)
b=0;
else if(sum==7)
b=1;
else if(sum==19)
{
if(s[1][16]=='#'&&s[4][12]=='#')
b=2;
else if(s[1][16]=='#'&&s[4][16]=='#')
b=3;
else
b=5;
}
else if(sum==14)
b=4;
else if(sum==21)
{
if(s[4][12]=='#')
b=6;
else
b=9;
}
else if(sum==11)
b=7;
else
b=8;
if(flag)
printf("%d\n",a+b);
else
printf("%d\n",a-b);
}
return 0;
}
从字符串最后面往前面进行计算,然后注意进位问题和前导0问题就行了。
也可以用昨天晚上学长讲的大数加法的方法来做,我就是想告诉你们可以这样做而已。
#include
#include
#include
#include
using namespace std;
int main()
{
int ans[1003],la,lb,l,k;
char a[1003],b[1003];
while(~scanf("%s%s",a,b))
{
la=strlen(a);
lb=strlen(b);
l=max(la,lb);
k=0;
memset(ans,0,sizeof(ans));
for(int i=1; i<=l; i++)
{
if(la-i>=0&&lb-i>=0)
ans[l-i]=(a[la-i]-'0')+(b[lb-i]-'0')+k;
else if(la-i<0)
ans[l-i]=(b[lb-i]-'0')+k;
else
ans[l-i]=(a[la-i]-'0')+k;
k=ans[l-i]/2;
ans[l-i]%=2;
}
if(k)
printf("1");
for(int i=0; i
直接计算蛋糕的每一种边和蛋糕的长宽关系,利用这个关系计算每一种边的个数即可。
具体关系你画一个图就知道了。
#include
#include
using namespace std;
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int a,b;
scanf("%d%d",&a,&b);
if(a>b) swap(a,b);
if(a==1)
{
if(b==1) printf("0 0 0 0 1\n");
else printf("0 0 %d 2 0\n",b-2);
}
else printf("%d %d 4 0 0\n",(a-2)*(b-2),(a-2)*2+(b-2)*2);
}
}
将九宫格标记序号:
1 2 3
4 5 6
7 8 9
先用一个二维数组a[10][10],将所有可行的路径标记为1:如从1可以到5,那么我们使a[1][5]=1;
利用for循环将字符串遍历:如果这个字符到下一个字符是可行的,将这个字符妨碍到的其它的字符标记为1,例如:本来从1到3为不可行的,但是我们如果已经使用过2,那么把a[1][3]=1,a[3][1]=1,标记为可行。如果着一个字符到下一个字符为不可行的,直接退出for循环输出NO。
1、如何判断两个字符是否可行?假设第一个字符化为整数是x,第二个字符化为整数是y,判断a[x][y]是否等于1即可。
2、如何退出for循环?用一个flag标记,flag==0表示我们这个for循环运行到字符串结束,flag==1表示我们提前退出for循环。
3、memcpy(a,b,sizeof(a))是什么意思?让b数组变成与a数组完全相同的数组。(实在不能理解的话,就把a数组定义在while循环里面,去掉b数组)。
#include
#include
int t;
char s[10];
int a[10][10],b[10][10]=
{
// 1 2 3 4 5 6 7 8 9
{0,0,0,0,0,0,0,0,0,0},//0
{0,0,1,0,1,1,1,0,1,0},//1
{0,1,0,1,1,1,1,1,0,1},//2
{0,0,1,0,1,1,1,0,1,0},//3
{0,1,1,1,0,1,0,1,1,1},//4
{0,1,1,1,1,0,1,1,1,1},//5
{0,1,1,1,0,1,0,1,1,1},//6
{0,0,1,0,1,1,1,0,1,0},//7
{0,1,0,1,1,1,1,1,0,1},//8
{0,0,1,0,1,1,1,0,1,0}//9
};
int main()
{
scanf("%d",&t);
while(t--)
{
scanf("%s",s);
memcpy(a,b,sizeof(a));
int flag=0,l=strlen(s);
for(int i=0; i
找规律的题目。
#include
#include
int main()
{
int n,m;
char a[1003][1003];
while(scanf("%d%d",&n,&m)!=EOF)
{
memset(a,0,sizeof(a));
for(int i=0; i<=n; i++)
{
for(int j=0; j<=m; j++)
a[i][j]=' ';
}
for(int i=0; i
要知道从11点~12点钟声不会敲响,从23点到24点钟声也不会敲响。
直接b-a,然后判断上面的情况出现了几次,减去这个次数。
#include
int main()
{
int t,a,b;
scanf("%d",&t);
while(t--)
{
int num=0;
scanf("%d%d",&a,&b);
if(a<12&&b>=12)
num++;
if(b==24)
num++;
printf("%d\n",b-a-num);
}
return 0;
}