1.兔子爬洞问题:兔子白天爬出5米,晚上又掉下去2米。问给定洞的深度,兔子要爬多少天。
PS:有没有为兔子想过。。。 没事干嘛掉洞
2.将给定字符串中的大写字母变小写,小写字母变大写,数字不变,其它字符和空格不算。然后把改好的存在另外一个数组里。
3.高精度乘法,一个是0-64位的数,一个是0至9间的数,求相乘结果。
把第一个写出来了,但不知道那个输入参数如何弄
就是那个N
#include<iostream>
#include<memory.h>
using namespace std;
int main(int argc,char **argv)
{
char *ch=argv[1];
int n = (int)(*ch);
n=n-48;
// int n=*argv[1].
cout<<"n="<<n<<endl;
int l=0;
int day=1;
while(l<n)
{
//白天
l=l+5;
if(l>=n)
{
cout<<"l="<<l<<endl;
break;
}
else
{
l=l-2;
}
day=day+1;
cout<<"day="<<day<<endl;
}
cout<<"一共用"<<day<<"天";
return 0;
}
75 个解决方案
#1
#include<iostream>
#include<memory.h>
using namespace std;
int str2int(const char *str);
int main(int argc,char **argv)
{
// char *ch=argv[1];
//int n = (int)(*ch);
//n=n-48;
int n=str2int(argv[1]);
cout<<"n="<<n<<endl;
int l=0;
int day=1;
while(l<n)
{
//白天
l=l+5;
if(l>=n)
{
cout<<"l="<<l<<endl;
break;
}
else
{
l=l-2;
}
day=day+1;
cout<<"day="<<day<<endl;
}
cout<<"一共用"<<day<<"天";
return 0;
}
int str2int(const char *str)
{
int temp=0;
const char *ptr=str;//ptr保存str字符串头
if(*str == '-' || *str =='+' )
{
str++;
}
while(*str !=0)
{
if((*str <'0')||(*str >'9'))
{
break;//当当前字符不是数字,退出循环
}
temp=temp*10+(*str-'0');//如果当前字符是数字就当数值计算
str++;
}
if(*ptr =='-')//如果字符串是以'-'开头,转换成其相反数
{
temp=-temp;
}
return temp;
}
#2
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXLEN 200
#define bool int
#define TRUE 1
#define FALSE 0
int main()
{
unsigned int an1[MAXLEN+10];
unsigned int an2[MAXLEN+10];
unsigned int result[MAXLEN*2+10];
char szline1[MAXLEN+10];
char szline2[MAXLEN+10];
bool bstartoutput=FALSE;
int i,j;
scanf("%s",szline1);
scanf("%s",szline2);
memset(an1,0,sizeof(an1));
memset(an2,0,sizeof(an2));
memset(result,0,sizeof(result));
j=0;
for(i=strlen(szline1)-1;i>=0;i--)
{
an1[j++]=szline1[i]-'0';
}
j=0;
for(i=strlen(szline2)-1;i>=0;i--)
{
an2[j++]=szline2[i]-'0';
}
for(i=0;i<strlen(szline2);i++)
{
for(j=0;j<strlen(szline1);j++)
{
result[i+j]+=an2[i]*an1[j];
// printf("%d",result[i+j]);
}
}
for(i=0;i<MAXLEN*2;i++)
{
if(result[i]>=10)
{
result[i+1] +=result[i]/10 ;
result[i]%=10;
}
}
for(i=MAXLEN*2;i>=0;i--)
{
if(bstartoutput)
{
printf("%d",result[i]);
}
else if(result[i])
{
printf("%d",result[i]);
bstartoutput=TRUE;
}
// if(!bstartoutput)
// {
// printf("");
// }
}
printf("\n");
return 0;
}
#3
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXLEN 200
#define bool int
#define TRUE 1
#define FALSE 0
int main()
{
unsigned int an1[MAXLEN+10];
unsigned int an2[MAXLEN+10];
unsigned int result[MAXLEN*2+10];
char szline1[MAXLEN+10];
char szline2[MAXLEN+10];
bool bstartoutput=FALSE;
int i,j;
scanf("%s",szline1);
scanf("%s",szline2);
memset(an1,0,sizeof(an1));
memset(an2,0,sizeof(an2));
memset(result,0,sizeof(result));
j=0;
for(i=strlen(szline1)-1;i>=0;i--)
{
an1[j++]=szline1[i]-'0';
}
j=0;
for(i=strlen(szline2)-1;i>=0;i--)
{
an2[j++]=szline2[i]-'0';
}
for(i=0;i<strlen(szline2);i++)
{
for(j=0;j<strlen(szline1);j++)
{
result[i+j]+=an2[i]*an1[j];
// printf("%d",result[i+j]);
}
}
for(i=0;i<MAXLEN*2;i++)
{
if(result[i]>=10)
{
result[i+1] +=result[i]/10 ;
result[i]%=10;
}
}
for(i=MAXLEN*2;i>=0;i--)
{
if(bstartoutput)
{
printf("%d",result[i]);
}
else if(result[i])
{
printf("%d",result[i]);
bstartoutput=TRUE;
}
// if(!bstartoutput)
// {
// printf("");
// }
}
printf("\n");
return 0;
}
#4
第一题的PS应该是,兔子爬的什么洞?兔子如何爬动的?兔子能爬动么?这么大只兔子,爬一白天,就爬了5米?这两米怎么掉下去的?谁想出来的,把
蜗牛改成
兔子。
#5
#6
我也觉得好玩,很小的时候暑假作业上都是蜗牛爬的问题,现在弄成兔子了、
#7
第一题,设兔子洞深为n米,则需要n/3天。
#8
第二题:
//数组a和b中保存乘数和被乘数,r的长度为len_a+len_b,保存结果。
void q_array_multiply(const int *a, int len_a, const int *b, int len_b, int *r)
{
int r_len = len_b+len_a;
memset(r, 0, r_len*sizeof(int));
for (int a_count=len_a-1; a_count>-1; --a_count)
{
for (int b_count=len_b-1; b_count>-1; --b_count)
{
r[a_count+b_count+1] += a[a_count]*b[b_count];
}
}
for (int r_count=r_len-1; r_count>0; --r_count)
{
r[r_count-1] += r[r_count]/10;
r[r_count] = r[r_count]%10;
}
}
//数组a和b中保存乘数和被乘数,r的长度为len_a+len_b,保存结果。
void q_array_multiply(const int *a, int len_a, const int *b, int len_b, int *r)
{
int r_len = len_b+len_a;
memset(r, 0, r_len*sizeof(int));
for (int a_count=len_a-1; a_count>-1; --a_count)
{
for (int b_count=len_b-1; b_count>-1; --b_count)
{
r[a_count+b_count+1] += a[a_count]*b[b_count];
}
}
for (int r_count=r_len-1; r_count>0; --r_count)
{
r[r_count-1] += r[r_count]/10;
r[r_count] = r[r_count]%10;
}
}
#9
要分类的
洞深度不大于5米的,需要1天
大于5米需要n/3+ (n%3==0 ? 0 : 1) 天
#10
大于5米需要n/3 天
#11
#12
这题目挺好玩的!
#13
//第二题
void changeWord(char *src,char* des)
{
cout<<src<<endl;
char * s = src;
while(*s!='\0')
{
if(*s>='A' && *s<='Z')
*s ^= 0x20;
else
if(*s>='a' && *s<='z')
*s ^= 0x20;
s++;
}
cout<<src<<endl;
memcpy(des,src,strlen(src)+1);
}
#14
高精度乘法,一个是0-64位的数,一个是0至9间的数,求相乘结果
可以用数组,因为一个参数是0-9之间
可以考虑用循环,将乘法改为加法运算
可以用数组,因为一个参数是0-9之间
可以考虑用循环,将乘法改为加法运算
#15
//只考虑正整数
char* largerMul(char* m,uint n)
{
uint step = 0;
char * ret = new char(strlen(m)+2);
char *p = ret;
char *t = m;
uint r;
while(*t != '\0')
{
r = n* (*t^0x30)+step;
*p = r%10 ^ 0x30;
step = r/10;
++t;
++p;
}
if(step)
{
*p = step ^ 0x30;
p++;
}
*p='\0';
for(int i=0;i<strlen(ret)/2;++i)
{
char temp = ret[i];
ret[i] = ret[strlen(ret)-i-1];
ret[strlen(ret)-i-1] = temp;
}
return ret;
}
#16
不错,科技自己玩玩
#17
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void strchange(const char *src,char *des)
{
while(*src)
{
if (*src>='a'&& *src<='z')
{
*des = *src - 'a' + 'A';
}
else if(*src>='A'&& *src<='Z')
{
*des= *src + 'a'-'A';
}
des++;
src++;
}
}
int main()
{
//printf("%d",'a'-'A');
char strTest[100];
scanf("%s",strTest);
char strResult[100];
strchange(strTest,strResult);
printf("%s",strResult);
return 0;
}
#18
//1.兔子爬洞问题:兔子白天爬出5米,晚上又掉下去2米。
// 问给定洞的深度,兔子要爬多少天。
#include<stdio.h>
int day_to_out(int deep)
{
if(deep <= 5)
return 1;
else
return day_to_out(deep - 3) + 1;
}
int main(int argc, char *argv[])
{
int deep;
printf("please input the deep of the hole: ");
scanf("%d", &deep);
printf("she need %d day(s) to get out of the hole\n", day_to_out(deep));
return 0;
}
//2.将给定字符串中的大写字母变小写,小写字母变大写,数字不变,
// 其它字符和空格不算。然后把改好的存在另外一个数组里。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAX 50
int main(int argc, char *argv[])
{
char *src = "hElLo, 2012w@OrLd";
char dest[MAX];
int index = 0;
while(*src)
{
if(*src >= 97 && *src <= 122)
{
dest[index++] = *src - 32;
}
else if( *src >= 65 && *src <= 90)
{
dest[index++] = *src + 32;
}
else
{
dest[index++] = *src;
}
src++;
}
dest[index] = '\0';
printf("%s\n", dest);
return 0;
}
//3.高精度乘法,一个是0-64位的数,一个是0至9间的数,求相乘结果。
#include<stdio.h>
#include<string.h>
#define MAX 64
int main(int argc, char *argv[])
{
char num_1[MAX];
int num_2;
char ret[MAX + 2]; // save the result
int len;
int b = 0; // 进位
int temp = 0;
int index = 0;
printf("please input two number: ");
scanf("%s %d", num_1, &num_2);
len = strlen(num_1);
index = len;
ret[index + 1] = '\0';
char *p = num_1 + len - 1;
while(len--)
{
temp = ((*p - '0') * num_2) + b;
ret[index--] = (char)((temp >= 10 ? (temp % 10) : temp) + '0');
b = (temp - (temp % 10)) / 10;
p--;
}
ret[index] = (char)(b + '0');
printf("%s * %d equals %s\n", num_1, num_2, (b > 0 ? ret + index : ret + index + 1));
return 0;
}
// 问给定洞的深度,兔子要爬多少天。
#include<stdio.h>
int day_to_out(int deep)
{
if(deep <= 5)
return 1;
else
return day_to_out(deep - 3) + 1;
}
int main(int argc, char *argv[])
{
int deep;
printf("please input the deep of the hole: ");
scanf("%d", &deep);
printf("she need %d day(s) to get out of the hole\n", day_to_out(deep));
return 0;
}
//2.将给定字符串中的大写字母变小写,小写字母变大写,数字不变,
// 其它字符和空格不算。然后把改好的存在另外一个数组里。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAX 50
int main(int argc, char *argv[])
{
char *src = "hElLo, 2012w@OrLd";
char dest[MAX];
int index = 0;
while(*src)
{
if(*src >= 97 && *src <= 122)
{
dest[index++] = *src - 32;
}
else if( *src >= 65 && *src <= 90)
{
dest[index++] = *src + 32;
}
else
{
dest[index++] = *src;
}
src++;
}
dest[index] = '\0';
printf("%s\n", dest);
return 0;
}
//3.高精度乘法,一个是0-64位的数,一个是0至9间的数,求相乘结果。
#include<stdio.h>
#include<string.h>
#define MAX 64
int main(int argc, char *argv[])
{
char num_1[MAX];
int num_2;
char ret[MAX + 2]; // save the result
int len;
int b = 0; // 进位
int temp = 0;
int index = 0;
printf("please input two number: ");
scanf("%s %d", num_1, &num_2);
len = strlen(num_1);
index = len;
ret[index + 1] = '\0';
char *p = num_1 + len - 1;
while(len--)
{
temp = ((*p - '0') * num_2) + b;
ret[index--] = (char)((temp >= 10 ? (temp % 10) : temp) + '0');
b = (temp - (temp % 10)) / 10;
p--;
}
ret[index] = (char)(b + '0');
printf("%s * %d equals %s\n", num_1, num_2, (b > 0 ? ret + index : ret + index + 1));
return 0;
}
#19
第一个问题应该是蜗牛爬洞还说的过去,一看就是变态出的没脑子的题!!
#20
大于5米的我想应该是这样:
白天 = 0.5天
如果是x米,当x-3*n <= 5 时 跳出循环,
跳出的天数 是 (n+0.5)天。
白天 = 0.5天
如果是x米,当x-3*n <= 5 时 跳出循环,
跳出的天数 是 (n+0.5)天。
#21
第一题:
if(N%3 == 0)
{
return N/3;
}else
{
return N/3+1;
}
#22
第一题 假设天数为n. 深度为len, 兔子最后一次爬m。
则有:
3(n - 1) + m = len (len >= 3)
不难得出,当len >= 3时,最后一次爬的长度肯定会超过5。
所以,3(n - 1) = len - m(m = 3, 4, 5)
n = (len - m)/3 (m = 0,1,2)
即 n = len / 3 (len >= 3)
所以答案是:
1 len = 1,2
n = len / 3 len >= 3
则有:
3(n - 1) + m = len (len >= 3)
不难得出,当len >= 3时,最后一次爬的长度肯定会超过5。
所以,3(n - 1) = len - m(m = 3, 4, 5)
n = (len - m)/3 (m = 0,1,2)
即 n = len / 3 (len >= 3)
所以答案是:
1 len = 1,2
n = len / 3 len >= 3
#23
第一题:
void rabit_go_go_go(void)
{
int deep = 10;
int p_up = 5;
int p_down = 2;
int day = (int)((float)(deep - p_up)/(p_up - p_down) + 0.5) + 1;
printf("day=%d...\n", day);
return;
}
#24
1.第一题
2.第二题
char* fun(char a[])
{
char* p=a;
for(;*p!=0;p++)
{
if(*p>=97 && *p<=122)
{
*p-=32;
}
else if(*p>=65 && *p<=90)
{
*p+=32;
}
}
return a;
}
int sum=0;//洞的深度
int duzi=0;//兔子每天爬出距离
cout<<"情输入洞的深度:";
cin>>sum;
int i=0;//记录天数
while(duzi<sum)
{
duzi+=5;
if(duzi>=sum)
{
cout<<"总共花了"<<i+1<<"天才爬出"<<endl;
break;
}
i++;
duzi-=2;
}
2.第二题
char* fun(char a[])
{
char* p=a;
for(;*p!=0;p++)
{
if(*p>=97 && *p<=122)
{
*p-=32;
}
else if(*p>=65 && *p<=90)
{
*p+=32;
}
}
return a;
}
#25
第二题:
char letters[128];
void letters_init(void)
{
static int letters_init_done = 0;
if(letters_init_done) return;
int i;
for(i=0; i<128; ++i) {
if(i>='a' && i<='z') {
letters[i] = i-32;
} else if(i>='A' && i<='Z') {
letters[i] = i+32;
} else {
letters[i] = i;
}
}
letters_init_done = 1;
return;
}
char *letter_convert(char *dst, const char *src)
{
char *tmp = (char *)dst;
do {
*dst++ = letters[(int)*src];
} while('\0' != *src++);
printf("convert result=%s...\n", tmp);
return tmp;
}
#26
23楼写的不错啊
#27
我写的测试程序和这个略不同,改一下:char *letter_convert(char *dst, const char *src)开始调用一次void letters_init(void)。
#28
23楼写的不错啊
#29
第三题:
char ret_tmp[9][9];
void product_init(void)
{
static int product_init_done = 0;
if(product_init_done) return;
int i;
int j;
for(i=0; i<10; ++i) {
for(j=0; j<10; ++j) {
ret_tmp[i][j] = i*j;
}
}
product_init_done = 1;
}
char *product(char *dst, const char *one, char two)
{
int ret;
int carry = 0;
char *cp = (char *)(one + strlen(one) - 1);
char tmp[128];
char *tp = tmp+127;
*tp = '\0';
while(cp>=one) {
ret = ret_tmp[*cp-'0'][two-'0'];
ret += carry;
carry = ret/10;
*--tp = ret%10+'0';
--cp;
}
if(carry) {
*--tp = carry + '0';
}
strcpy(dst, tp);
return dst;
}
int main(int argc, char *argv[])
{
char one[64] = "987654321";
char two = '2';
char result[128];
product_init();
printf("product=%s...\n", product(result, one, two));
return 0;
}
#30
1: n / 3
2:
if (int[i] >= 'a' && int[i] <= 'z')
{
int[i] -= 32;
}
else (int[i] >= 'A' && int[i] <= 'Z')
{
int[i] += 32;
}
3: 汇编方法
2:
if (int[i] >= 'a' && int[i] <= 'z')
{
int[i] -= 32;
}
else (int[i] >= 'A' && int[i] <= 'Z')
{
int[i] += 32;
}
3: 汇编方法
#31
华为也靠这种题??
#32
头像显示小猪爬杆,跟第一题很合拍,哈哈
#33
以下是兔子爬洞的模拟代码::)
<?php
function crawl($L,$l_d=5,$l_n=-2){
$time=array();
$time['day']=0;
$time['night']=0;
$left=$L;
while($left>0){
$left=$left-$l_d;
$time['day']++;
if($left<=0)
break;
$left=$left-$l_n;
$time['night']++;
if($left<=0)
break;
}
return $time;
}
print_r(crawl(7));
?>
#34
不过如此啊。各位去看看NOIP的复赛题。我都不提NOI,提那们算是欺负你们。
#35
第一题:#include "stdafx.h"
#include<iostream>
using namespace std;
int main()
{int h,n;
cout<<"请输入这个洞的深度:"<<endl;
cin>>h;
for(n=1;;n++){
int h1=5*n-2*(n-1);//heigh in day;
int h2=3*n;//heigh in night
if(h1>=h){cout<<"兔子要爬"<<n<<"天。"<<endl;
break;}
if(h2>=h){cout<<"兔子要爬"<<n<<"天。"<<endl;
break;}
}
return 0;
}
#include<iostream>
using namespace std;
int main()
{int h,n;
cout<<"请输入这个洞的深度:"<<endl;
cin>>h;
for(n=1;;n++){
int h1=5*n-2*(n-1);//heigh in day;
int h2=3*n;//heigh in night
if(h1>=h){cout<<"兔子要爬"<<n<<"天。"<<endl;
break;}
if(h2>=h){cout<<"兔子要爬"<<n<<"天。"<<endl;
break;}
}
return 0;
}
#36
1:
int height;
int days = 0;
cin >> height;
while(height >5)
{
days++;
height -= 3;
}
cout << "need to spend " << days << " days" << endl;
int height;
int days = 0;
cin >> height;
while(height >5)
{
days++;
height -= 3;
}
cout << "need to spend " << days << " days" << endl;
#37
int days = 0; 改为 int days = 1;
#38
#39
好像不对吧,大于5m时,假如是7m,那7/3+1=3天吗,实际上只需2天呀
#40
当洞深h<=5m时,天数day=1;
当洞深h>5m,并且h是整数,天数day=h/3;
当洞深h>5m,h是浮点数(即h>h的整数部分,不包含小数部分都是0的浮点数),并且(h的整数部分-5)/3==0,则天数=h/3+1
不知小生的算法对不对,求释
当洞深h>5m,并且h是整数,天数day=h/3;
当洞深h>5m,h是浮点数(即h>h的整数部分,不包含小数部分都是0的浮点数),并且(h的整数部分-5)/3==0,则天数=h/3+1
不知小生的算法对不对,求释
#41
设兔子洞深为n米,兔子白天向上爬a米,晚上掉下来b米,则需要(n-(b+1))/(a-b)+1天,这个可以证明,你们自己证明一下吧。
#42
n=8.5m,a=5m,b=2m, 结果是2天,对?
#43
只写了第一题,后面没看
#include <stdio.h>
int main(void)
{
int days;
int depth;
scanf("%d", &depth);
if (depth <= 5)
{
days = 1;
}
else
{
int x = (depth - 5) % 3 ? 1 : 0;
days = (depth - 5) / 3 + 1 + x;
}
printf("%d\n", days);
return 0;
}
#44
#45
用java写的递归,更简单。
import java.io.*;
public class New {
public static void Cac(int day,int hole_length){
if(hole_length==0||hole_length<=5){
System.out.println("兔子爬出洞的时间为"+day);
}
else
{
hole_length-=3;
Cac(day+1,hole_length);
}
}
public static void main(String[] args)throws IOException {
System.out.print("请输入洞的深度:");
InputStreamReader in=new InputStreamReader(System.in);
BufferedReader ir=new BufferedReader(in);
String s=ir.readLine();
int len=Integer.parseInt(s);
System.out.println(len);
int day=1;
Cac(day,len);
}
}
#46
用java写的递归,更简单。用C也行
import java.io.*;
public class New {
public static void Cac(int day,int hole_length){
if(hole_length==0||hole_length<=5){
System.out.println("兔子爬出洞的时间为"+day);
}
else
{
hole_length-=3;
Cac(day+1,hole_length);
}
}
public static void main(String[] args)throws IOException {
System.out.print("请输入洞的深度:");
InputStreamReader in=new InputStreamReader(System.in);
BufferedReader ir=new BufferedReader(in);
String s=ir.readLine();
int len=Integer.parseInt(s);
System.out.println(len);
int day=1;
Cac(day,len);
}
}
#47
蜗牛爬洞
#48
华为是可以上csdn的,说不定就是看了这头像,来了灵感
#49
这些题目 很有意思的
#50
第3题
#include<stdio.h>
#define MAX 64
int main(char argc,char **argv)
{
char num1[MAX]={0};
long int num2 = 0;
printf("sizeof(long int) =%d\n",sizeof(long int));
scanf("%s",num1);
scanf("%d",&num2);
printf("num=%s num2=%d\n",num1,num2);
int len =0;
int i = 0;
len =strlen(num1);
int index =len;
int b= 0;
char sum3[index+1];
char *p=NULL;
p=num1+len-1;
int temp = 0 ;
while(len)
{
temp=(num1[--len]-'0')*num2+b;
sum3[index--] = (char)((temp >= 10 ? (temp % 10) : temp) + '0');
b = (temp - (temp % 10)) / 10;
if(len== 0)
{
temp=b;
sum3[index] = temp + '0';
}
}
printf("sum=%s\n",sum3);
return 0;
}
#include<stdio.h>
#define MAX 64
int main(char argc,char **argv)
{
char num1[MAX]={0};
long int num2 = 0;
printf("sizeof(long int) =%d\n",sizeof(long int));
scanf("%s",num1);
scanf("%d",&num2);
printf("num=%s num2=%d\n",num1,num2);
int len =0;
int i = 0;
len =strlen(num1);
int index =len;
int b= 0;
char sum3[index+1];
char *p=NULL;
p=num1+len-1;
int temp = 0 ;
while(len)
{
temp=(num1[--len]-'0')*num2+b;
sum3[index--] = (char)((temp >= 10 ? (temp % 10) : temp) + '0');
b = (temp - (temp % 10)) / 10;
if(len== 0)
{
temp=b;
sum3[index] = temp + '0';
}
}
printf("sum=%s\n",sum3);
return 0;
}
#1
#include<iostream>
#include<memory.h>
using namespace std;
int str2int(const char *str);
int main(int argc,char **argv)
{
// char *ch=argv[1];
//int n = (int)(*ch);
//n=n-48;
int n=str2int(argv[1]);
cout<<"n="<<n<<endl;
int l=0;
int day=1;
while(l<n)
{
//白天
l=l+5;
if(l>=n)
{
cout<<"l="<<l<<endl;
break;
}
else
{
l=l-2;
}
day=day+1;
cout<<"day="<<day<<endl;
}
cout<<"一共用"<<day<<"天";
return 0;
}
int str2int(const char *str)
{
int temp=0;
const char *ptr=str;//ptr保存str字符串头
if(*str == '-' || *str =='+' )
{
str++;
}
while(*str !=0)
{
if((*str <'0')||(*str >'9'))
{
break;//当当前字符不是数字,退出循环
}
temp=temp*10+(*str-'0');//如果当前字符是数字就当数值计算
str++;
}
if(*ptr =='-')//如果字符串是以'-'开头,转换成其相反数
{
temp=-temp;
}
return temp;
}
#2
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXLEN 200
#define bool int
#define TRUE 1
#define FALSE 0
int main()
{
unsigned int an1[MAXLEN+10];
unsigned int an2[MAXLEN+10];
unsigned int result[MAXLEN*2+10];
char szline1[MAXLEN+10];
char szline2[MAXLEN+10];
bool bstartoutput=FALSE;
int i,j;
scanf("%s",szline1);
scanf("%s",szline2);
memset(an1,0,sizeof(an1));
memset(an2,0,sizeof(an2));
memset(result,0,sizeof(result));
j=0;
for(i=strlen(szline1)-1;i>=0;i--)
{
an1[j++]=szline1[i]-'0';
}
j=0;
for(i=strlen(szline2)-1;i>=0;i--)
{
an2[j++]=szline2[i]-'0';
}
for(i=0;i<strlen(szline2);i++)
{
for(j=0;j<strlen(szline1);j++)
{
result[i+j]+=an2[i]*an1[j];
// printf("%d",result[i+j]);
}
}
for(i=0;i<MAXLEN*2;i++)
{
if(result[i]>=10)
{
result[i+1] +=result[i]/10 ;
result[i]%=10;
}
}
for(i=MAXLEN*2;i>=0;i--)
{
if(bstartoutput)
{
printf("%d",result[i]);
}
else if(result[i])
{
printf("%d",result[i]);
bstartoutput=TRUE;
}
// if(!bstartoutput)
// {
// printf("");
// }
}
printf("\n");
return 0;
}
#3
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXLEN 200
#define bool int
#define TRUE 1
#define FALSE 0
int main()
{
unsigned int an1[MAXLEN+10];
unsigned int an2[MAXLEN+10];
unsigned int result[MAXLEN*2+10];
char szline1[MAXLEN+10];
char szline2[MAXLEN+10];
bool bstartoutput=FALSE;
int i,j;
scanf("%s",szline1);
scanf("%s",szline2);
memset(an1,0,sizeof(an1));
memset(an2,0,sizeof(an2));
memset(result,0,sizeof(result));
j=0;
for(i=strlen(szline1)-1;i>=0;i--)
{
an1[j++]=szline1[i]-'0';
}
j=0;
for(i=strlen(szline2)-1;i>=0;i--)
{
an2[j++]=szline2[i]-'0';
}
for(i=0;i<strlen(szline2);i++)
{
for(j=0;j<strlen(szline1);j++)
{
result[i+j]+=an2[i]*an1[j];
// printf("%d",result[i+j]);
}
}
for(i=0;i<MAXLEN*2;i++)
{
if(result[i]>=10)
{
result[i+1] +=result[i]/10 ;
result[i]%=10;
}
}
for(i=MAXLEN*2;i>=0;i--)
{
if(bstartoutput)
{
printf("%d",result[i]);
}
else if(result[i])
{
printf("%d",result[i]);
bstartoutput=TRUE;
}
// if(!bstartoutput)
// {
// printf("");
// }
}
printf("\n");
return 0;
}
#4
第一题的PS应该是,兔子爬的什么洞?兔子如何爬动的?兔子能爬动么?这么大只兔子,爬一白天,就爬了5米?这两米怎么掉下去的?谁想出来的,把
蜗牛改成
兔子。
#5
#6
我也觉得好玩,很小的时候暑假作业上都是蜗牛爬的问题,现在弄成兔子了、
#7
第一题,设兔子洞深为n米,则需要n/3天。
#8
第二题:
//数组a和b中保存乘数和被乘数,r的长度为len_a+len_b,保存结果。
void q_array_multiply(const int *a, int len_a, const int *b, int len_b, int *r)
{
int r_len = len_b+len_a;
memset(r, 0, r_len*sizeof(int));
for (int a_count=len_a-1; a_count>-1; --a_count)
{
for (int b_count=len_b-1; b_count>-1; --b_count)
{
r[a_count+b_count+1] += a[a_count]*b[b_count];
}
}
for (int r_count=r_len-1; r_count>0; --r_count)
{
r[r_count-1] += r[r_count]/10;
r[r_count] = r[r_count]%10;
}
}
//数组a和b中保存乘数和被乘数,r的长度为len_a+len_b,保存结果。
void q_array_multiply(const int *a, int len_a, const int *b, int len_b, int *r)
{
int r_len = len_b+len_a;
memset(r, 0, r_len*sizeof(int));
for (int a_count=len_a-1; a_count>-1; --a_count)
{
for (int b_count=len_b-1; b_count>-1; --b_count)
{
r[a_count+b_count+1] += a[a_count]*b[b_count];
}
}
for (int r_count=r_len-1; r_count>0; --r_count)
{
r[r_count-1] += r[r_count]/10;
r[r_count] = r[r_count]%10;
}
}
#9
要分类的
洞深度不大于5米的,需要1天
大于5米需要n/3+ (n%3==0 ? 0 : 1) 天
#10
大于5米需要n/3 天
#11
#12
这题目挺好玩的!
#13
//第二题
void changeWord(char *src,char* des)
{
cout<<src<<endl;
char * s = src;
while(*s!='\0')
{
if(*s>='A' && *s<='Z')
*s ^= 0x20;
else
if(*s>='a' && *s<='z')
*s ^= 0x20;
s++;
}
cout<<src<<endl;
memcpy(des,src,strlen(src)+1);
}
#14
高精度乘法,一个是0-64位的数,一个是0至9间的数,求相乘结果
可以用数组,因为一个参数是0-9之间
可以考虑用循环,将乘法改为加法运算
可以用数组,因为一个参数是0-9之间
可以考虑用循环,将乘法改为加法运算
#15
//只考虑正整数
char* largerMul(char* m,uint n)
{
uint step = 0;
char * ret = new char(strlen(m)+2);
char *p = ret;
char *t = m;
uint r;
while(*t != '\0')
{
r = n* (*t^0x30)+step;
*p = r%10 ^ 0x30;
step = r/10;
++t;
++p;
}
if(step)
{
*p = step ^ 0x30;
p++;
}
*p='\0';
for(int i=0;i<strlen(ret)/2;++i)
{
char temp = ret[i];
ret[i] = ret[strlen(ret)-i-1];
ret[strlen(ret)-i-1] = temp;
}
return ret;
}
#16
不错,科技自己玩玩
#17
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void strchange(const char *src,char *des)
{
while(*src)
{
if (*src>='a'&& *src<='z')
{
*des = *src - 'a' + 'A';
}
else if(*src>='A'&& *src<='Z')
{
*des= *src + 'a'-'A';
}
des++;
src++;
}
}
int main()
{
//printf("%d",'a'-'A');
char strTest[100];
scanf("%s",strTest);
char strResult[100];
strchange(strTest,strResult);
printf("%s",strResult);
return 0;
}
#18
//1.兔子爬洞问题:兔子白天爬出5米,晚上又掉下去2米。
// 问给定洞的深度,兔子要爬多少天。
#include<stdio.h>
int day_to_out(int deep)
{
if(deep <= 5)
return 1;
else
return day_to_out(deep - 3) + 1;
}
int main(int argc, char *argv[])
{
int deep;
printf("please input the deep of the hole: ");
scanf("%d", &deep);
printf("she need %d day(s) to get out of the hole\n", day_to_out(deep));
return 0;
}
//2.将给定字符串中的大写字母变小写,小写字母变大写,数字不变,
// 其它字符和空格不算。然后把改好的存在另外一个数组里。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAX 50
int main(int argc, char *argv[])
{
char *src = "hElLo, 2012w@OrLd";
char dest[MAX];
int index = 0;
while(*src)
{
if(*src >= 97 && *src <= 122)
{
dest[index++] = *src - 32;
}
else if( *src >= 65 && *src <= 90)
{
dest[index++] = *src + 32;
}
else
{
dest[index++] = *src;
}
src++;
}
dest[index] = '\0';
printf("%s\n", dest);
return 0;
}
//3.高精度乘法,一个是0-64位的数,一个是0至9间的数,求相乘结果。
#include<stdio.h>
#include<string.h>
#define MAX 64
int main(int argc, char *argv[])
{
char num_1[MAX];
int num_2;
char ret[MAX + 2]; // save the result
int len;
int b = 0; // 进位
int temp = 0;
int index = 0;
printf("please input two number: ");
scanf("%s %d", num_1, &num_2);
len = strlen(num_1);
index = len;
ret[index + 1] = '\0';
char *p = num_1 + len - 1;
while(len--)
{
temp = ((*p - '0') * num_2) + b;
ret[index--] = (char)((temp >= 10 ? (temp % 10) : temp) + '0');
b = (temp - (temp % 10)) / 10;
p--;
}
ret[index] = (char)(b + '0');
printf("%s * %d equals %s\n", num_1, num_2, (b > 0 ? ret + index : ret + index + 1));
return 0;
}
// 问给定洞的深度,兔子要爬多少天。
#include<stdio.h>
int day_to_out(int deep)
{
if(deep <= 5)
return 1;
else
return day_to_out(deep - 3) + 1;
}
int main(int argc, char *argv[])
{
int deep;
printf("please input the deep of the hole: ");
scanf("%d", &deep);
printf("she need %d day(s) to get out of the hole\n", day_to_out(deep));
return 0;
}
//2.将给定字符串中的大写字母变小写,小写字母变大写,数字不变,
// 其它字符和空格不算。然后把改好的存在另外一个数组里。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAX 50
int main(int argc, char *argv[])
{
char *src = "hElLo, 2012w@OrLd";
char dest[MAX];
int index = 0;
while(*src)
{
if(*src >= 97 && *src <= 122)
{
dest[index++] = *src - 32;
}
else if( *src >= 65 && *src <= 90)
{
dest[index++] = *src + 32;
}
else
{
dest[index++] = *src;
}
src++;
}
dest[index] = '\0';
printf("%s\n", dest);
return 0;
}
//3.高精度乘法,一个是0-64位的数,一个是0至9间的数,求相乘结果。
#include<stdio.h>
#include<string.h>
#define MAX 64
int main(int argc, char *argv[])
{
char num_1[MAX];
int num_2;
char ret[MAX + 2]; // save the result
int len;
int b = 0; // 进位
int temp = 0;
int index = 0;
printf("please input two number: ");
scanf("%s %d", num_1, &num_2);
len = strlen(num_1);
index = len;
ret[index + 1] = '\0';
char *p = num_1 + len - 1;
while(len--)
{
temp = ((*p - '0') * num_2) + b;
ret[index--] = (char)((temp >= 10 ? (temp % 10) : temp) + '0');
b = (temp - (temp % 10)) / 10;
p--;
}
ret[index] = (char)(b + '0');
printf("%s * %d equals %s\n", num_1, num_2, (b > 0 ? ret + index : ret + index + 1));
return 0;
}
#19
第一个问题应该是蜗牛爬洞还说的过去,一看就是变态出的没脑子的题!!
#20
大于5米的我想应该是这样:
白天 = 0.5天
如果是x米,当x-3*n <= 5 时 跳出循环,
跳出的天数 是 (n+0.5)天。
白天 = 0.5天
如果是x米,当x-3*n <= 5 时 跳出循环,
跳出的天数 是 (n+0.5)天。
#21
第一题:
if(N%3 == 0)
{
return N/3;
}else
{
return N/3+1;
}
#22
第一题 假设天数为n. 深度为len, 兔子最后一次爬m。
则有:
3(n - 1) + m = len (len >= 3)
不难得出,当len >= 3时,最后一次爬的长度肯定会超过5。
所以,3(n - 1) = len - m(m = 3, 4, 5)
n = (len - m)/3 (m = 0,1,2)
即 n = len / 3 (len >= 3)
所以答案是:
1 len = 1,2
n = len / 3 len >= 3
则有:
3(n - 1) + m = len (len >= 3)
不难得出,当len >= 3时,最后一次爬的长度肯定会超过5。
所以,3(n - 1) = len - m(m = 3, 4, 5)
n = (len - m)/3 (m = 0,1,2)
即 n = len / 3 (len >= 3)
所以答案是:
1 len = 1,2
n = len / 3 len >= 3
#23
第一题:
void rabit_go_go_go(void)
{
int deep = 10;
int p_up = 5;
int p_down = 2;
int day = (int)((float)(deep - p_up)/(p_up - p_down) + 0.5) + 1;
printf("day=%d...\n", day);
return;
}
#24
1.第一题
2.第二题
char* fun(char a[])
{
char* p=a;
for(;*p!=0;p++)
{
if(*p>=97 && *p<=122)
{
*p-=32;
}
else if(*p>=65 && *p<=90)
{
*p+=32;
}
}
return a;
}
int sum=0;//洞的深度
int duzi=0;//兔子每天爬出距离
cout<<"情输入洞的深度:";
cin>>sum;
int i=0;//记录天数
while(duzi<sum)
{
duzi+=5;
if(duzi>=sum)
{
cout<<"总共花了"<<i+1<<"天才爬出"<<endl;
break;
}
i++;
duzi-=2;
}
2.第二题
char* fun(char a[])
{
char* p=a;
for(;*p!=0;p++)
{
if(*p>=97 && *p<=122)
{
*p-=32;
}
else if(*p>=65 && *p<=90)
{
*p+=32;
}
}
return a;
}
#25
第二题:
char letters[128];
void letters_init(void)
{
static int letters_init_done = 0;
if(letters_init_done) return;
int i;
for(i=0; i<128; ++i) {
if(i>='a' && i<='z') {
letters[i] = i-32;
} else if(i>='A' && i<='Z') {
letters[i] = i+32;
} else {
letters[i] = i;
}
}
letters_init_done = 1;
return;
}
char *letter_convert(char *dst, const char *src)
{
char *tmp = (char *)dst;
do {
*dst++ = letters[(int)*src];
} while('\0' != *src++);
printf("convert result=%s...\n", tmp);
return tmp;
}
#26
23楼写的不错啊
#27
我写的测试程序和这个略不同,改一下:char *letter_convert(char *dst, const char *src)开始调用一次void letters_init(void)。
#28
23楼写的不错啊
#29
第三题:
char ret_tmp[9][9];
void product_init(void)
{
static int product_init_done = 0;
if(product_init_done) return;
int i;
int j;
for(i=0; i<10; ++i) {
for(j=0; j<10; ++j) {
ret_tmp[i][j] = i*j;
}
}
product_init_done = 1;
}
char *product(char *dst, const char *one, char two)
{
int ret;
int carry = 0;
char *cp = (char *)(one + strlen(one) - 1);
char tmp[128];
char *tp = tmp+127;
*tp = '\0';
while(cp>=one) {
ret = ret_tmp[*cp-'0'][two-'0'];
ret += carry;
carry = ret/10;
*--tp = ret%10+'0';
--cp;
}
if(carry) {
*--tp = carry + '0';
}
strcpy(dst, tp);
return dst;
}
int main(int argc, char *argv[])
{
char one[64] = "987654321";
char two = '2';
char result[128];
product_init();
printf("product=%s...\n", product(result, one, two));
return 0;
}
#30
1: n / 3
2:
if (int[i] >= 'a' && int[i] <= 'z')
{
int[i] -= 32;
}
else (int[i] >= 'A' && int[i] <= 'Z')
{
int[i] += 32;
}
3: 汇编方法
2:
if (int[i] >= 'a' && int[i] <= 'z')
{
int[i] -= 32;
}
else (int[i] >= 'A' && int[i] <= 'Z')
{
int[i] += 32;
}
3: 汇编方法
#31
华为也靠这种题??
#32
头像显示小猪爬杆,跟第一题很合拍,哈哈
#33
以下是兔子爬洞的模拟代码::)
<?php
function crawl($L,$l_d=5,$l_n=-2){
$time=array();
$time['day']=0;
$time['night']=0;
$left=$L;
while($left>0){
$left=$left-$l_d;
$time['day']++;
if($left<=0)
break;
$left=$left-$l_n;
$time['night']++;
if($left<=0)
break;
}
return $time;
}
print_r(crawl(7));
?>
#34
不过如此啊。各位去看看NOIP的复赛题。我都不提NOI,提那们算是欺负你们。
#35
第一题:#include "stdafx.h"
#include<iostream>
using namespace std;
int main()
{int h,n;
cout<<"请输入这个洞的深度:"<<endl;
cin>>h;
for(n=1;;n++){
int h1=5*n-2*(n-1);//heigh in day;
int h2=3*n;//heigh in night
if(h1>=h){cout<<"兔子要爬"<<n<<"天。"<<endl;
break;}
if(h2>=h){cout<<"兔子要爬"<<n<<"天。"<<endl;
break;}
}
return 0;
}
#include<iostream>
using namespace std;
int main()
{int h,n;
cout<<"请输入这个洞的深度:"<<endl;
cin>>h;
for(n=1;;n++){
int h1=5*n-2*(n-1);//heigh in day;
int h2=3*n;//heigh in night
if(h1>=h){cout<<"兔子要爬"<<n<<"天。"<<endl;
break;}
if(h2>=h){cout<<"兔子要爬"<<n<<"天。"<<endl;
break;}
}
return 0;
}
#36
1:
int height;
int days = 0;
cin >> height;
while(height >5)
{
days++;
height -= 3;
}
cout << "need to spend " << days << " days" << endl;
int height;
int days = 0;
cin >> height;
while(height >5)
{
days++;
height -= 3;
}
cout << "need to spend " << days << " days" << endl;
#37
int days = 0; 改为 int days = 1;
#38
#39
好像不对吧,大于5m时,假如是7m,那7/3+1=3天吗,实际上只需2天呀
#40
当洞深h<=5m时,天数day=1;
当洞深h>5m,并且h是整数,天数day=h/3;
当洞深h>5m,h是浮点数(即h>h的整数部分,不包含小数部分都是0的浮点数),并且(h的整数部分-5)/3==0,则天数=h/3+1
不知小生的算法对不对,求释
当洞深h>5m,并且h是整数,天数day=h/3;
当洞深h>5m,h是浮点数(即h>h的整数部分,不包含小数部分都是0的浮点数),并且(h的整数部分-5)/3==0,则天数=h/3+1
不知小生的算法对不对,求释
#41
设兔子洞深为n米,兔子白天向上爬a米,晚上掉下来b米,则需要(n-(b+1))/(a-b)+1天,这个可以证明,你们自己证明一下吧。
#42
n=8.5m,a=5m,b=2m, 结果是2天,对?
#43
只写了第一题,后面没看
#include <stdio.h>
int main(void)
{
int days;
int depth;
scanf("%d", &depth);
if (depth <= 5)
{
days = 1;
}
else
{
int x = (depth - 5) % 3 ? 1 : 0;
days = (depth - 5) / 3 + 1 + x;
}
printf("%d\n", days);
return 0;
}
#44
#45
用java写的递归,更简单。
import java.io.*;
public class New {
public static void Cac(int day,int hole_length){
if(hole_length==0||hole_length<=5){
System.out.println("兔子爬出洞的时间为"+day);
}
else
{
hole_length-=3;
Cac(day+1,hole_length);
}
}
public static void main(String[] args)throws IOException {
System.out.print("请输入洞的深度:");
InputStreamReader in=new InputStreamReader(System.in);
BufferedReader ir=new BufferedReader(in);
String s=ir.readLine();
int len=Integer.parseInt(s);
System.out.println(len);
int day=1;
Cac(day,len);
}
}
#46
用java写的递归,更简单。用C也行
import java.io.*;
public class New {
public static void Cac(int day,int hole_length){
if(hole_length==0||hole_length<=5){
System.out.println("兔子爬出洞的时间为"+day);
}
else
{
hole_length-=3;
Cac(day+1,hole_length);
}
}
public static void main(String[] args)throws IOException {
System.out.print("请输入洞的深度:");
InputStreamReader in=new InputStreamReader(System.in);
BufferedReader ir=new BufferedReader(in);
String s=ir.readLine();
int len=Integer.parseInt(s);
System.out.println(len);
int day=1;
Cac(day,len);
}
}
#47
蜗牛爬洞
#48
华为是可以上csdn的,说不定就是看了这头像,来了灵感
#49
这些题目 很有意思的
#50
第3题
#include<stdio.h>
#define MAX 64
int main(char argc,char **argv)
{
char num1[MAX]={0};
long int num2 = 0;
printf("sizeof(long int) =%d\n",sizeof(long int));
scanf("%s",num1);
scanf("%d",&num2);
printf("num=%s num2=%d\n",num1,num2);
int len =0;
int i = 0;
len =strlen(num1);
int index =len;
int b= 0;
char sum3[index+1];
char *p=NULL;
p=num1+len-1;
int temp = 0 ;
while(len)
{
temp=(num1[--len]-'0')*num2+b;
sum3[index--] = (char)((temp >= 10 ? (temp % 10) : temp) + '0');
b = (temp - (temp % 10)) / 10;
if(len== 0)
{
temp=b;
sum3[index] = temp + '0';
}
}
printf("sum=%s\n",sum3);
return 0;
}
#include<stdio.h>
#define MAX 64
int main(char argc,char **argv)
{
char num1[MAX]={0};
long int num2 = 0;
printf("sizeof(long int) =%d\n",sizeof(long int));
scanf("%s",num1);
scanf("%d",&num2);
printf("num=%s num2=%d\n",num1,num2);
int len =0;
int i = 0;
len =strlen(num1);
int index =len;
int b= 0;
char sum3[index+1];
char *p=NULL;
p=num1+len-1;
int temp = 0 ;
while(len)
{
temp=(num1[--len]-'0')*num2+b;
sum3[index--] = (char)((temp >= 10 ? (temp % 10) : temp) + '0');
b = (temp - (temp % 10)) / 10;
if(len== 0)
{
temp=b;
sum3[index] = temp + '0';
}
}
printf("sum=%s\n",sum3);
return 0;
}