小叶子学英文:
小叶子现有一个非负整数n,它的任务是计算 n 的各位数的和 , 并且按英语输出总和中的每一个数字。
昨天的问题,忘记写0的情况。。。。
#include <stdio.h>
#include <string.h>
char str[1000000];
int arr[100000];
int SUM[100000];
int main()
{
gets(str);
long long int len = strlen(str);
long long int sum = 0;
for(int i = 0; i < len; i++)
{
arr[i] = str[i];
}
for(int i = 0; i < len; i++)
{
sum += arr[i] - '0';
}
long long int i = 0;
long long int flag = 0;
// printf("%d\n",sum);
if(sum == 0)
{
printf("zero ");
}
while(sum > 0)
{
SUM[++i] = sum % 10;
sum /= 10;
flag++;
}
while(flag != 0)
{
i = flag;
if(SUM[i] == 9)
printf("nine ");
if(SUM[i] == 8)
printf("eight ");
if(SUM[i] == 7)
printf("seven ");
if(SUM[i] == 6)
printf("six ");
if(SUM[i] == 5)
printf("five ");
if(SUM[i] == 4)
printf("four ");
if(SUM[i] == 3)
printf("three ");
if(SUM[i] == 2)
printf("two ");
if(SUM[i] == 1)
printf("one ");
if(SUM[i] == 0)
printf("zero ");
flag--;
}
return 0;
}
无聊的眺爷:
最近眺爷无聊的玩起了数格点的游戏,现给定平面上的两个格点 p1 = (x1,y1) 和 p2 = (x2,y2), 他想找出线段p1p2上除p1和p2以外一共有几个格点?但他总是数错, 你能写个程序帮帮他吗?
写着题首先得弄清楚格点是啥,重点在于格点是整数点,然后用辗转相除求大公约数就ok。
#include <stdio.h>
int main()
{
int x1,y1,x2,y2;
int temp1,temp2;
scanf("%d %d",&x1,&y1);
scanf("%d %d",&x2,&y2);
if(x1 > x2)
{
temp1 = x1 - x2;
}else{
temp1 = x2 - x1;
}
if(y1 > y2)
{
temp2 = y1- y2;
}else{
temp2 = y2 - y1;
}
while(temp2)
{
int t = temp1%temp2;
temp1 = temp2;
temp2 = t;
}
if(temp1 > 0)
{
printf("%d\n",temp1 - 1);
}else{
printf("0\n");
}
return 0;
}
小叶子的黑白观:
众所周知,实验室的小叶子长的很黑,但是,他自己却总是喜欢颠倒黑白,总喜欢把黑的说成白的(比如 他自己,O(∩_∩)O哈哈~)。这不,有一天,他又开始了他的颠倒之路了。他拿出了两个数,试图颠倒这两个数。规则如下:如果这两个数的反转的和等于两个数和的反转,例如: 12和34。12的反转是21,34的反转是43,21+43=64,而12+34=46,46的反转为64。两个经过反转的数相等,那么他就颠倒失败了,否则他就成功了!!
这题写一个反转函数然后注意两个数之间的关系就能求解。
#include <stdio.h>
int turn(int a)
{
int b,c = 0;
while(a > 0)
{
b =a % 10;
c = c * 10 + b;
a /= 10;
}
return c;
}
int main()
{
int n;
scanf("%d",&n);
int i;
int a,b,sum1,sum2;
for(i = 0; i < n; i++)
{
scanf("%d %d",&a,&b);
sum1 = turn(a+b);
sum2 = turn(a) + turn(b);
if(sum1 == sum2)
{
printf("%d\n",a+b);
}else{
printf("小叶子颠倒成功\n");
}
}
return 0;
}
ICPC Fighting!
在ICPC比赛中,气球的分配方式如下。
每当一个团队解决了一个问题,该团队就得到一个气球。
第一个解决一个问题的队伍可以得到一个额外的气球。
一场比赛有26个问题,标记为A,B,C,...,Z。你会得到比赛中已解决的问题的顺序,用字符串s表示,其中第i个字符表示问题s[i]已经被某个团队解决。没有团队会两次解决同一个问题。
确定各队收到的气球总数。请注意,有些问题可能没有被任何一个团队所解决。
写这题最主要注意的是反复出现的字母,第二次出现的话只能加一分。
#include <stdio.h>
#include <string.h>
char str[50];
int main(){
int t;
int n;
scanf("%d", &t);
while(t--){
scanf("%d%s", &n, str);
int score = 0;
int word[26]={0};
for(int i=0; i<n; i++){
if(!word[str[i]-'A']) {
score += 2;
word[str[i]-'A']=1;
}else
score++;
}
printf("%d\n", score);
}
return 0;
}
我爱学习:
现在有n个学生,每个学生都有一个能力值ai,为了方便管理,决定将n个学生分成k组(每个小组里至少要有一个人)。
如果一个小组有一个能力在该小组极其突出的学生,这个小组就比较容易管理。
这个小组的管理方便度f(i)=第i个小组能力值最大的-第i个小组能力值最小的,
即f(i)=max(aj∈team i)-min(aj∈team i), 现在想知道f(1)+f(2)+........f(k)的最大值。
看懂题目,这题就是来水的。。。
#include <stdio.h>
int arr[10000];
int sum[10000];
int main()
{
int n,t;
int i;
int max,min;
while(~scanf("%d",&n))
{
max = 0;
min = 10000;
scanf("%d",&t);
for(i = 0; i < n; i++)
{
scanf("%d",&arr[i]);
}
for(int j = 0; j < t; j++)
{
for(i = 0; i < n; i++)
{
if(max < arr[i])
{
max = arr[i];
}
if(min > arr[i])
{
min = arr[i];
}
}
printf("%d\n",max - min);
}
}
return 0;
}
交上去才发现自己好像多写了个没有必要的循环。。。但是题目已经过了就没改。
将对应字母交叉:
输入2个字符串,将对应字母交叉组成第三个字符串,最后输入第三个字符串。例如输入的2个字符串分别是“abcd”和“1234”,则合并后的字符串是“a1b2c3d4”。若2个字符串的长度不等,则其中的一个字符串多余的部分放在结果字符串的尾部,如2个字符串分别是“banana”和“12”,则合并后的字符串是“b1a2nana”
要求:第一个字符串的第一个字母总是结果串的第一个字母。
搞了半天才发现这个题目自己有个数组写成了整型数组,难怪没有输出。写代码的时候一定要注意不要被习惯带偏。
#include <stdio.h>
char s1[100],s2[100];
char s3[200];
int main()
{
scanf("%s",s1);
// getchar();
scanf("%s",s2);
int i,j;
for(i=0,j=0; s1[i]!='\0' && s2[i]!='\0'; i++)
{
s3[j++] = s1[i];
s3[j++] = s2[i];
}
while(s1[i]!='\0')
s3[j++] = s1[i++];
while(s2[i]!='\0')
s3[j++] = s2[i++];
s3[j]='\0';
printf("%s",s3);
return 0;
}
最大和最小:给定两个整数 n 和 m,要求 m个整数的和为n,m个整数的乘积最大。
满足条件的整数序列可能有多种,请你输出一个字典序最小的满足条件的序列。
输入:第一行输入两个整数 n和m (1 <= n <= 1e9), (1 <= m <= n <= 1e6)。
输出:输出m个用空格隔开的整数表示字典序最小的一种方案数。
样例输入
7 3
样例输出
2 2 3
其实题目看上去难,只要明白最大和最小值的差值为0或1时这题就很好写出来了。
#include <stdio.h>
int main()
{
int n,m;
scanf("%d %d",&n,&m);
int i = 0;
int temp = m;
int count = 0;
while(1)
{
printf("%d ",n/m);
n -= n/m;
m--;
count++;
if(temp == count)
{
break;
}
}
return 0;
}