一个笼子里面关了若干只鸡和兔子(鸡有2只脚,兔子有4只脚,没有例外)。已经知道了笼子里面脚的总数a,则笼子里面至少有多少只动物,至多有多少只动物?
nCases代表测试组数,nFeets代表每一组一共拥有的足数, 然后分为三种情况:
- 能被4整除,则也能被2整除,故最少是全为兔子 /4,最多是全为鸡 /2
- 不能被4整除,能被2整除,则最多是只有一只鸡,其他全是兔子
- 奇数情况,不成立
#include<cstdio>
int main() {
int nCases, nFeets; //组数与足数
while (scanf_s("%d", &nCases) != EOF) {
for (int i = 0; i < nCases; i++) {
scanf_s("%d", &nFeets);
if (nFeets % 4 == 0) {
printf("%d %d\n", nFeets / 4, nFeets / 2);
}
else if (nFeets % 2 == 0) {
printf("%d %d\n", nFeets / 4 + 1, nFeets / 2);
}
else {
printf("0 0\n");
}
}
}
return 0;
}
安全证书问题
使用VS会出现'scanf': This function or variable may be unsafe. Consider using scanf_s ins这种错误,这是新版vc库添加的警告因为微软认为scanf的使用存在安全隐患,因为C/C++中的字符串处理都是以\0为截止符的,如果搜索不到\0,容易出现字符串越界所有vc扩展的所谓安全标准库,都添加了一个参数用以指定字符串参数的长度,用以避免这种安全隐患。
解决方法
- 按照编译出错的提示 将scanf全部替换成 scanf _s 即可KO。
- 编译器预设 在VS中,按alt+F7 打开工程属性,然后找到图片上指向的地方,添加一行内容_CRT_SECURE_NO_DEPRECATE 就OK了 完美跳过~