题目
注意:这里不是水仙花数!! 返回值为aaa + bb + c *
#include
using namespace std;
typedef long long ll;
int get(int n);
int main()
{
//int s[100];//以为是数组看错了,这里有点粗心
int n,m;
cin >> n >> m;
int flag = 0; //是否有特殊数标志位
for(int i = n;i <= m;i ++) //n-m范围
{
if(get(i)==i){ //函数判断
flag = 1;
printf("%d\n",i);}
}
if(!flag) //没有找到的情况
{
cout <<"Not Found";
}
return 0;
}
int get(int n)//查找这个特殊三位数的函数
{
int sum = 0;
int a = n%10; //个位
int b = (n/10) % 10; //十位
int c = (n/10) / 10; //百位
sum = a*a*a + b*b + c ;
return sum;
}
//函数写法2
int get(int n){
int ans = 0;
int a = n % 10;
ans += a * a * a;
n /= 10;
a = n % 10;
ans += a * a;
n /= 10;
a = n % 10;
ans += a;
return ans;
}
编写程序,读取用户输入的代表总金额的double值,打印表示该金额所需的最少纸币张数和硬币个数,打印从最大金额开始。纸币的种类有十元、五元、一元,硬币的种类有五角、一角、贰分、壹分。
注意:即使不需要某一种类的纸币或硬币,也要打印出来。
输入样例1:
47.63
输出样例1:
4 张十元
1 张五元
2 张一元
1 个五角
1 个一角
1 个贰分
1 个壹分
输入样例2:
51.2
输出样例2:
5 张十元
0 张五元
1 张一元
0 个五角
2 个一角
0 个贰分
0 个壹分
老师给的答案:
#include
double val[10] = {
10,
5,
1,
0.5,
0.1,
0.02,
0.01,
};
int ans[10];
int main(){
1-6
依旧是函数的定义,我们把移位操作单独实现后程序就简单了。
double n = 0;
scanf("%lf", &n);
for(int i = 0; i < 7; i ++ ){
if(n >= val[i]){
ans[i] += (n / val[i]);
n -= 1.0 * ans[i] * val[i];
}
}
printf("%d 张十元\n", ans[0]);
printf("%d 张五元\n", ans[1]);
printf("%d 张一元\n", ans[2]);
printf("%d 个五角\n", ans[3]);
printf("%d 个一角\n", ans[4]);
printf("%d 个贰分\n", ans[5]);
printf("%d 个壹分\n", ans[6]);
}
这个不知道为什么不对,记录一下
#include
using namespace std;
typedef long long ll;
int main()
{
//int s[100];
double n;
cin >> n;
int a = n/10;
int b, c, d;
int a2, a3, a4, b2,b3, c1,c2;
b=int(n) % 10;
{
if (b > 5 && b <= 9) {a2 =1;a3=b-5;}
else if (b > 4 && b <= 5) {a2 =1;a3=0;}
else if ( b < 5) a2 =0;a3=b;
}
int c=int(n*10) % 10;
{
if (c > 5 && c <= 9){ b2 =1;b3=c-5;}
if (c > 4 && c <= 5) b2 =1;b3=0;
if ( c < 5) a2 =0;b3=c;
}
d=int(n*100) % 10;
{
if(d%2 == 0) c1 =d/2; c2 = 0;
if(d%2 == 1) c1 = d/2; c2 = 1;
}
cout << a << "张十元" << "\n";
cout << a2 << "张五元"<< "\n";
cout << a3 << "张一元"<< "\n";
cout << b2 << "个五角"<< "\n";
cout << b3 << "个一角"<< "\n";
cout << c1 << "个贰分"<< "\n";
cout << c2 << "个壹分"<< "\n";
return 0;
}
儿童节那天有 K 位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友们。
小明一共有 N 块巧克力,其中第 i 块是 Hi×Wi 的方格组成的长方形。
为了公平起见,小明需要从这 N 块巧克力中切出 K 块巧克力分给小朋友们。
切出的巧克力需要满足:
形状是正方形,边长是整数
大小相同
例如一块 6×5 的巧克力可以切出 6 块 2×2 的巧克力或者 2 块 3×3 的巧克力。
当然小朋友们都希望得到的巧克力尽可能大,你能帮小明计算出最大的边长是多少么?
Sample input:
2 10
6 5
5 6
Sample output:
2
#include
#include
#define MAX 200010
using namespace std;
int h[MAX],w[MAX];
int n,i,k;
bool check(int a)//分成的巧克力长度为a, 找到要求的巧克力块数量
{
int num = 0;//分成的千克力为的长度的数量
for(i = 0;i < n;i++)
{
num += (h[i]/a) * (w[i]/a);
if(num >= k )
return true;
}
return false;
}
int main(){
cin >> n >> k;
for(i = 0; i < n;i++)
{
cin >> h[i] >> w[i];
//scanf("%d%d",&h[i],&w[i]);
}
int l = 1, r = 1e5;
while(l < r)
{
int mid = (l+r)/2;
if(check(mid))
l = mid+1;
else
r = mid;
}
cout << r-1 << "\n";
return 0;
}
或者:
如果mid不加一,l就要去mid加一,反之,如果加一的话,r就要mid减一
总结错误:在main函数里又声明了一次n 会导致结果不正确
#define N 100005
using namespace std;
int h[N],w[N];
int n,i,k;
bool check(int a)
{
int num = 0;//记录分成长度为 a 的巧克力数量
for (int i = 0; i < n; i++)
{
num += (w[i] / a) * (h[i] / a);//每一大块可以分成的边长为 a 的巧克力数量
if (num >= k) return true;//大于要求数量,返回真
}
return false;
}
int main()
{
cin>>n>>k;
for(i=0;i